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发送email的3种方法
Apr 28 Python
python使用fcntl模块实现程序加锁功能示例
Jun 23 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
详解django.contirb.auth-认证
Jul 16 Python
Python对excel文档的操作方法详解
Dec 10 Python
python生成器与迭代器详解
Jan 01 Python
django基于restframework的CBV封装详解
Aug 08 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
python中的对数log函数表示及用法
Dec 09 Python
python 定义函数 返回值只取其中一个的实现
May 21 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
德劲1102收音机的打理维修案例
2021/03/02 无线电
web目录下不应该存在多余的程序(安全考虑)
2012/05/09 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
javascript下function声明一些小结
2007/12/28 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
使用js画图之饼图
2015/01/12 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
python友情链接检查方法
2015/07/08 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
django自定义模板标签过程解析
2019/12/14 Python
采购主管工作职责
2013/12/12 职场文书
给全校老师的建议书
2014/03/13 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
信用卡催款律师函
2015/05/27 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python