阅读 111

进程间的通信

方式1 queue队列 先进先出

进程之间默认是没有关联的,进程间的通信就是解决这个问题

from multiprocessing import Queue, Process这是解决普通进程间的通信
from multiprocessing import Manager, Pool这是解决进程间的通信

queue是阻塞的

from multiprocessing import Queue, Process
import os
import time

def write(q):
for value in [1, 2, 3]:
print("put %d to queue"%value)
q.put(value)
time.sleep(1)

def read(q):
while True:
if not q.empty():
value = q.get()
print("get %d from queue" % value)
time.sleep(1)
else:
break

if __name__ == "__main__":
queue =Queue()
pw = Process(target= write, args=(queue,)) ##这里就是把queue当作一个参数穿了进去。这样两个进程就和同一个queue相关联
pr = Process(target=read, args=(queue,))
pw.start()
pw.join()
pr.start()
pr.join()
print("complete")
Result:

put 1 to queue
put 2 to queue
put 3 to queue
get 1 from queue
get 2 from queue
get 3 from queue
complete

 

进程池之间的通信

from multiprocessing import Manager, Pool
import os
import time

def write(q):
for value in [1, 2, 3]:
print("put %d to queue"%value)
q.put(value)
time.sleep(1)

def read(q):
#while True:
#if not q.empty():
#value = q.get()
# print("get %d from queue" % value)
# time.sleep(1)
#else:
#break
  
  for value in range(q.qsize()):
  print("get %d from queue" % q.get())


if __name__ == "__main__":
q = Manager().Queue() #使用Manager中的Queue来初始化
po = Pool()
po.apply(write,(q,))#使用阻塞时创建进程, 这样就不用在read中使用死循环了
po.apply(read,(q,))
po.close()
po.join()
print("complete")

原文:https://www.cnblogs.com/shamoguzhou/p/14979694.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐