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绘制MySQL数据图实现数据可视化
Mar 30 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Python实现加载及解析properties配置文件的方法
Mar 29 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
python2.7和NLTK安装详细教程
Sep 19 Python
使用Python实现分别输出每个数组
Dec 06 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
Python使用pdb调试代码的技巧
May 03 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
使用numpy nonzero 找出非0元素
May 14 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
地球防卫队:陪着奥特曼打小怪兽的人类力量 那些经典队服
2020/03/08 日漫
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
React styled-components设置组件属性的方法
2018/08/07 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
解决python 无法加载downsample模型的问题
2018/10/25 Python
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python线程threading模块用法详解
2020/02/26 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
2013/01/23 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
2013/01/09 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
毕业生自我鉴定
2013/11/05 职场文书
主题婚礼策划方案
2014/02/10 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2019入党申请书格式
2019/06/25 职场文书