温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中使用Queue、Pipe怎么实现进程通信

发布时间:2021-06-12 17:50:39 来源:亿速云 阅读:158 作者:Leah 栏目:开发技术

今天就跟大家聊聊有关Python中使用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,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中使用Queue、Pipe怎么实现进程通信有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI