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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
python基础知识小结之集合
Nov 25 Python
Python基础中所出现的异常报错总结
Nov 19 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
Aug 05 Python
对Python3使运行暂停的方法详解
Feb 18 Python
Python缓存技术实现过程详解
Sep 25 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
利用python绘制数据曲线图的实现
Apr 09 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
Python实现双向链表
May 25 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
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
layui导航栏实现代码
2017/05/19 Javascript
详解vue.js之绑定class和style的示例代码
2017/08/24 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
JS实现图片拖拽交换效果
2018/11/30 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python中的一些陷阱与技巧小结
2015/07/10 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
Python tkinter和exe打包的方法
2020/02/05 Python
详解python itertools功能
2020/02/07 Python
仓库文员岗位职责
2014/04/06 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
北京天坛导游词
2015/02/12 职场文书
出国留学单位推荐信
2015/03/26 职场文书