python 管道、队列_Python进程的通信Queue、Pipe实例分析

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

内容相关:

概念:进程的通信

Queue:创建与使用

Pipe:创建与使用

进程通信的概念

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

通信方法:

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

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

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

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

Queue:

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

Queue 在multiprocessing 模块中:from multiprocessing import Queue

Queue的使用:

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

2.传入对象:要在主进程外使用Queue对象,需要作为参数传入092304a3b27b4e49e9fb40362e17e4c4.png

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对象9e9ce04852676bb52521705395fc5391.png

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

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

from multiprocessing import Pipe,Process

def 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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值