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学习笔记_数据排序方法
May 22 Python
Python语言的面相对象编程方式初步学习
Mar 12 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
python中metaclass原理与用法详解
Jun 25 Python
解决Python3 控制台输出InsecureRequestWarning问题
Jul 15 Python
在django view中给form传入参数的例子
Jul 19 Python
Django 创建/删除用户的示例代码
Jul 24 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
Python实现钉钉订阅消息功能
Jan 14 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
python利用while求100内的整数和方式
Nov 07 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
java解析json方法总结
2019/05/16 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
jQuery过滤HTML标签并高亮显示关键字的方法
2015/08/07 Javascript
JS 实现可停顿的垂直滚动实例代码
2016/11/23 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
详解关于webpack多入口热加载很慢的原因
2019/04/24 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
解决ant-design-vue中menu菜单无法默认展开的问题
2020/10/31 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
Python实现读取并保存文件的类
2017/05/11 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
Python求区间正整数内所有素数之和的方法实例
2020/10/13 Python
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
Java如何支持I18N?
2016/10/31 面试题
银行简历自我评价
2014/02/11 职场文书
全运会口号
2014/06/20 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书