python树莓派通过队列怎么实现进程交互的程序
python树莓派通过队列怎么实现进程交互的程序
本文小编为大家详细介绍“python树莓派通过队列怎么实现进程交互的程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“python树莓派通过队列怎么实现进程交互的程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
写在前面
现在购物车有一任务需求,那就是需要进行图像识别和运动控制,因此需要初始化2个进程,从而分别完成相应的动作。因为运动控制需要图像识别的结果,因此现在就涉及到了python语法实现2个进程之间的协同合作,这篇博客就结合实际的python程序通过队列实现进程交互通过队列实现进程交互。
程序分析
首先介绍一下我们的需要的库函数:
importtimefrommultiprocessingimportProcess,Queue
from multiprocessing import Process, Queue
是主要的库,作用就是提供队列和进程操作函数,在本次测试中我们用的的进程和队列操作函数有:
q1.get()#获取q1队列里的内容q1.put("q1putthings1")#往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
deftest1(q1,q2):q1.put("fisrtdata")while(1):s=q2.get()print("q2left+"+str(q2.qsize()))print("q1get+"+s)q1.put("q1putthings1")q1.put("q1putthings2")time.sleep(1)
在之前的初始化函数中,我们是先初始化了p1进程,也就是test1
会先运行,因此为了保证在开始的时候进程的队列里面有内容,我先在函数的最开始就在q1队列中加入了内容“fisrt data”,为了保证测试持续进行,因此我将test1
进程设成了死循环,在test1
中,会先去获取q2队列里的内容和q2队列大小并打印,然后会在q1队列中放入新的内容,请注意,这里放入了2个节点的数据,分别是“q1 put things1”和“q1 put things2 ”
在这里我提出一个问题:
那就是当p1进程去获取q2队列里的内容的时候,p1进程会将q2队列里的全部内容都取出还是只会取出q2队列最前面的那个数据呢?
接下来我们就来解决一下这个问题。接下来我们来看一下test2函数里面干了些什么:
deftest2(q1,q2):while(1):s=q1.get()print("q1left+"+str(q1.qsize()))print("q2get+"+s)q2.put("q2putdata1")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函数里面只是做了线程启动的操作,我们再来看一下输出结果:
从结果中我们可以很清楚的看到,q1线程每次会加入2个节点数据,然后p2进程会从q1线程中做q1.get()
的操作,随着循环次数的不断增加,我们可以发现q1队列的长度不断增加,从而我们可以得出结论:
p1进程去获取q2队列里的内容的时候,p1进程会将q2队列最前面的那个数据取出。
读到这里,这篇“python树莓派通过队列怎么实现进程交互的程序”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...