python树莓派通过队列实现进程交互的程序分析


Posted in Python onJuly 04, 2021

写在前面

现在购物车有一任务需求,那就是需要进行图像识别和运动控制,因此需要初始化2个进程,从而分别完成相应的动作。因为运动控制需要图像识别的结果,因此现在就涉及到了python语法实现2个进程之间的协同合作,这篇博客就结合实际的python程序通过队列实现进程交互通过队列实现进程交互

程序分析

首先介绍一下我们的需要的库函数:

import time
from multiprocessing import Process, Queue

from multiprocessing import Process, Queue是主要的库,作用就是提供队列和进程操作函数,在本次测试中我们用的的进程和队列操作函数有:

q1.get()#获取q1队列里的内容
q1.put("q1 put things1")#往q1队列里面加入内容
p1 = Process(target=test1, args=(q1, q2))#初始化p1进程
p1.start()#启动p1进程
p1.join()#将p1进行加入系统调度
q1.qsize()#查看q1队列的大小

测试中的线程与进程对应关系:

q1队列 -> q1进程
q2队列 -> q2进程

有了上述的基本函数之后就可以来看我们的程序实现了,可以看到在程序中首先进行了进程的初始化,启动和加入系统调度,运行完这些语句之后就可以认为p1和p2进程初始化好了。

p1 = Process(target=test1, args=(q1, q2))
p2 = Process(target=test2, args=(q1, q2))

p1.start()
p2.start()

p1.join()
p2.join()

进程初始化完毕之后就可以来看主要的测试函数了,首先是test1

def test1(q1, q2):
    q1.put("fisrt data")
    while(1):
        s = q2.get()
        print('q2 left + ' + str(q2.qsize()))
        print('q1 get + ' + s)
        q1.put("q1 put things1")
        q1.put("q1 put things2\n")
        time.sleep(1)

在之前的初始化函数中,我们是先初始化了p1进程,也就是test1会先运行,因此为了保证在开始的时候进程的队列里面有内容,我先在函数的最开始就在q1队列中加入了内容“fisrt data”,为了保证测试持续进行,因此我将test1进程设成了死循环,在test1中,会先去获取q2队列里的内容和q2队列大小并打印,然后会在q1队列中放入新的内容,请注意,这里放入了2个节点的数据,分别是“q1 put things1”和“q1 put things2\n”

在这里我提出一个问题:

那就是当p1进程去获取q2队列里的内容的时候,p1进程会将q2队列里的全部内容都取出还是只会取出q2队列最前面的那个数据呢?

接下来我们就来解决一下这个问题。接下来我们来看一下test2函数里面干了些什么:

def test2(q1, q2):
    while(1):
        s = q1.get()
        print('q1 left + ' + str(q1.qsize()))
        print('q2 get + ' + s)
        q2.put("q2 put data1")
        time.sleep(1)

test2函数中做的事情就比较少了,就是先获取了q1队列中的数据和q1剩余队列大小并打印,接着往q2队列加入“q2 put data1”。

结果分析

我们来看一下main函数里面的调用:

if __name__ == '__main__':
    p1 = Process(target=test1, args=(q1, q2))
    p2 = Process(target=test2, args=(q1, q2))

    p1.start()
    p2.start()

    p1.join()
    p2.join()

在main函数里面只是做了线程启动的操作,我们再来看一下输出结果:

python树莓派通过队列实现进程交互的程序分析

从结果中我们可以很清楚的看到,q1线程每次会加入2个节点数据,然后p2进程会从q1线程中做q1.get()的操作,随着循环次数的不断增加,我们可以发现q1队列的长度不断增加,从而我们可以得出结论:
p1进程去获取q2队列里的内容的时候,p1进程会将q2队列最前面的那个数据取出

到此这篇关于python树莓派通过队列实现进程交互的程序分析的文章就介绍到这了,更多相关python树莓派进程交互内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单理解Python中基于生成器的状态机
Apr 13 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
python matplotlib中文显示参数设置解析
Dec 15 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
浅谈python中对于json写入txt文件的编码问题
Jun 07 Python
opencv python 2D直方图的示例代码
Jul 20 Python
python内存监控工具memory_profiler和guppy的用法详解
Jul 29 Python
Python学习笔记之While循环用法分析
Aug 14 Python
PyQt5多线程刷新界面防假死示例
Dec 13 Python
Python多线程 Queue 模块常见用法
Jul 04 #Python
python 中yaml文件用法大全
Jul 04 #Python
python3实现常见的排序算法(示例代码)
用Python编写简单的gRPC服务的详细过程
Jul 04 #Python
python中__slots__节约内存的具体做法
Jul 04 #Python
python中Matplotlib绘制直线的实例代码
Jul 04 #Python
C站最全Python标准库总结,你想要的都在这里
You might like
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python专用方法与迭代机制实例分析
2014/09/15 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
python中的字符串内部换行方法
2018/07/19 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
如何在python中执行另一个py文件
2020/04/30 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
使用CSS变量实现炫酷惊人的悬浮效果
2019/04/26 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
校园奶茶店创业计划书
2014/01/23 职场文书
机关出纳岗位职责
2014/04/03 职场文书
村长贪污检举信
2014/04/04 职场文书
出国留学自荐信模板
2015/03/06 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
离职信范文
2015/06/23 职场文书
新闻通讯稿模板
2015/07/22 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书