返回顶部
首页 > 资讯 > 后端开发 > Python >python树莓派怎么通过队列实现进程交互
  • 646
分享到

python树莓派怎么通过队列实现进程交互

2023-06-20 13:06:18 646人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了“python树莓派怎么通过队列实现进程交互”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python树莓派怎么通过队列实现进程交互”这篇文章吧。写在前面现在购物车有一任

这篇文章主要为大家展示了“python树莓派怎么通过队列实现进程交互”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python树莓派怎么通过队列实现进程交互”这篇文章吧。

写在前面

现在购物车有一任务需求,那就是需要进行图像识别和运动控制,因此需要初始化2个进程,从而分别完成相应的动作。因为运动控制需要图像识别的结果,因此现在就涉及到了python语法实现2个进程之间的协同合作,这篇文章就结合实际的python程序通过队列实现进程交互通过队列实现进程交互

程序分析

首先介绍一下我们的需要的库函数:

import timefrom 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频道!

--结束END--

本文标题: python树莓派怎么通过队列实现进程交互

本文链接: https://lsjlt.com/news/297078.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python树莓派怎么通过队列实现进程交互
    这篇文章主要为大家展示了“python树莓派怎么通过队列实现进程交互”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python树莓派怎么通过队列实现进程交互”这篇文章吧。写在前面现在购物车有一任...
    99+
    2023-06-20
  • python树莓派通过队列实现进程交互的程序分析
    写在前面 现在购物车有一任务需求,那就是需要进行图像识别和运动控制,因此需要初始化2个进程,从而分别完成相应的动作。因为运动控制需要图像识别的结果,因此现在就涉及到了python语法...
    99+
    2024-04-02
  • Python通过队列实现进程间通信详情
    目录一、前言二、队列简介三、多进程队列的使用四、使用队列在进程间通信一、前言 在多进程中,每个进程之间是什么关系呢?其实每个进程都有自己的地址空间、内存、数据栈以及其他记录其运行状态...
    99+
    2024-04-02
  • Python如何通过队列实现进程间通信
    本篇内容主要讲解“Python如何通过队列实现进程间通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何通过队列实现进程间通信”吧!一、前言在多进程中,每个进程之间是什么关系呢?其...
    99+
    2023-07-02
  • python多线程数据交互怎么实现
    在Python中,可以使用多线程模块threading来实现多线程数据交互。以下是一个简单的示例: import threading...
    99+
    2023-10-22
    python
  • 刷题系列 - Python中怎么通过非递归实现二叉树前序遍历
    这期内容当中小编将会给大家带来有关刷题系列 - Python中怎么通过非递归实现二叉树前序遍历,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。二叉树前序遍历(Binary Tree Preorder Tra...
    99+
    2023-06-02
  • 简述thinkphp自带队列think-queue的使用以及通过supervisor实现常驻进程
    think-queue是thinkphp官方提供的一个消息队列服务,适用于大并发、返回结果时间较长、需要批量操作等专门支持队列服务的扩展包。例如短信发送、模板消息邮件等推送。可以进行发布、获取、执行、...
    99+
    2023-09-07
    linux php redis
  • Jmeter通过OS进程取样器调用Python脚本实现参数互传
    1、 Python中 sys.argv的用法解释:sys.argv可以让python脚本从程序外部获取参数,sys.argv是一个列表,可用[]提取其中的元素,其第一个元素是程序本身...
    99+
    2024-04-02
  • Jmeter如何通过OS进程取样器调用Python脚本实现参数互传
    这篇文章主要介绍了Jmeter如何通过OS进程取样器调用Python脚本实现参数互传,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Python中 sys.argv的用法解释...
    99+
    2023-06-29
  • 怎么通过Python实现定时打卡小程序
    这篇文章主要为大家展示了“怎么通过Python实现定时打卡小程序”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么通过Python实现定时打卡小程序”这篇文章吧。只需在自己的python项目下随...
    99+
    2023-06-21
  • Python怎么通过paramiko库实现远程执行linux命令
    今天小编给大家分享一下Python怎么通过paramiko库实现远程执行linux命令的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作