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实现基于HTTP文件传输实例
Nov 08 Python
python统计一个文本中重复行数的方法
Nov 19 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python的时间模块datetime详解
Apr 17 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
从django的中间件直接返回请求的方法
May 30 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
Django多个app urls配置代码实例
Nov 26 Python
深入理解python协程
Jun 15 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
详解为生产环境编译Angular2应用的方法
2018/12/10 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
微信小程序实现简易table表格
2020/06/19 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
Python基于matplotlib实现绘制三维图形功能示例
2018/01/18 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python删除文本中行数标签的方法
2018/05/31 Python
Numpy之random函数使用学习
2019/01/29 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
安装python及pycharm的教程图解
2019/10/10 Python
Django更新models数据库结构步骤
2020/04/01 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
Python list和str互转的实现示例
2020/11/16 Python
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
法人委托书
2014/07/31 职场文书
员工生日活动方案
2014/08/24 职场文书
学校创先争优活动总结
2014/08/28 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS