Python进程的通信Queue、Pipe实例分析

作者:随风行云 时间:2021-11-22 13:50:44 

本文实例讲述了Python进程的通信Queue、Pipe。分享给大家供大家参考,具体如下:


内容相关:

概念:进程的通信

Queue:创建与使用

Pipe:创建与使用


进程通信的概念

  • 进程的资源空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。

  • 通信方法:

    • 数据传输:一个进程将它的数据发送给另一个进程【如socket一般,把需要通信的数据传输给对方】

    • 管道:使用一片独立的区域【不在双方的资源空间中】,像一个有两个口的仓库一样,厂家负责在东门把产品放到仓库,司机负责在西门拉走产品

    • 资源共享:约定一片区域,双方都可以随意取放

    • 消息队列:这也是一个独立的区域,足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息


Queue:

  • 可以使用队列multiprocessing.Queue来进行进程通信

Queue 在multiprocessing 模块中:from multiprocessing import Queue

  • Queue的使用:

    • 1.创建对象:Queue对象=Queue()

    • 2.传入对象:要在主进程外使用Queue对象,需要作为参数传入Python进程的通信Queue、Pipe实例分析

    • 3.操作对象:【获取元素:Queue对象.get()】、【放入元素:Queue对象.put(元素)】


#Queue在multiprocessing中
from multiprocessing import Queue,Process

def f(q):#要在主进程外使用,需要作为参数传入
 q.put(['helloworld'])

def m(q):
 print("get in p2:",q.get())

if __name__=="__main__":
 q=Queue()
 p=Process(target=f,args=(q,))
 p.start()
 p2=Process(target=m,args=(q,))
 p2.start()


Pipe:

  • 可以使用管道Pipe来进行进程通信

Pipe 在multiprocessing 模块中:from multiprocessing import Pipe

  • Pipe的使用:

    • 1.创建对象:第一个Pipe对象,第二个Pipe对象=Pipe(),返回两个对象,第一个对象只能发,第二个对象只能收

    • 2.传入对象:在要发送的进程,传入第一个Pipe对象;在要接收的进程,传入第二个Pipe对象Python进程的通信Queue、Pipe实例分析

    • 3.操作对象:【获取元素:第一个对象.recv()】、【放入元素:第二个对象.send(元素)】

    • 4.操作完成后关闭管道:第一个对象.close(),第一个对象.close()

    from multiprocessing import Pipe,Processdef f(conn):  a=[1,2,3,4]  conn.send(a)  conn.close()def m(conn):  a=conn.recv()  conn.close()if __name__=="__main__":  parent_conn,child_conn=Pipe()#返回两个值,第一个只能发,第二个只能收  p1=Process(target=f,args=(child_conn,))  p2 = Process(target=m, args=(parent_conn,))#  p1.start()  p2.start()  p1.join()  p2.join()  

    希望本文所述对大家Python程序设计有所帮助。

    来源:https://www.cnblogs.com/progor/p/8439320.html

    标签:Python,进程的通信,Queue,Pipe
    0
    投稿

    猜你喜欢

  • Python实现微信自动好友验证,自动回复,发送群聊链接方法

    2021-10-22 00:11:23
  • accept-charset与Header P3P

    2009-04-01 18:43:00
  • MenuEverywhere 程序图标设计

    2011-08-14 06:57:23
  • asp如何做一个看他爱不爱你的小测验?

    2010-07-11 21:16:00
  • Python类的用法实例浅析

    2023-07-31 11:17:18
  • Oracle中pivot函数图文实例详解

    2023-07-12 22:13:49
  • 简单form标准化实例——语义结构

    2007-06-20 16:32:00
  • Windows下MySQL安全权限设置方法

    2009-07-30 08:32:00
  • ini_set的用法介绍

    2023-11-15 07:31:56
  • 在python中实现将一张图片剪切成四份的方法

    2023-10-04 02:20:04
  • ASP显示当前在线人数统计代码

    2010-04-24 15:47:00
  • Go语言命令行操作命令详细介绍

    2023-07-22 16:15:40
  • 设计表单的标签和输入区

    2009-04-27 16:16:00
  • 我们需要的是怎样的分页?

    2007-09-28 20:24:00
  • XMLHTTP错误The server name or address could not be resolved 的解决过程

    2009-12-26 18:33:00
  • 中文段首不需要空两格

    2010-04-23 20:31:00
  • asp如何让页面过时并指定一个过时时间?

    2010-05-13 16:40:00
  • 如何用Python徒手写线性回归

    2023-06-12 13:47:14
  • oracle 存储过程加密的方法

    2009-03-06 10:58:00
  • 网页设计的色彩思考

    2007-10-19 13:30:00
  • asp之家 网络编程 m.aspxhome.com