进程间的通信---进程池Pool


如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是multiprocessing.Queue()

 1 from multiprocessing import Pool,Manager
 2 import os,time
 3 
 4 def write(q):
 5     print("%s is start(write)---父进程为----%s"%(os.getpid(),os.getppid()))
 6     for i in range(5):
 7         print("put------- %d"%i)
 8         q.put(i)
 9         time.sleep(0.5)
10 
11 def read(q):
12     print("%s is start(write)---父进程为----%s"%(os.getpid(),os.getppid()))
13     for i in range(q.qsize()):
14         print("---get %d----"%q.get(i))
15         time.sleep(0.5)
16 
17 print("%s start-----"%os.getpid())
18 pl = Pool(5)
19 
20 # 修改import中的Queue为Manager
21 q = Manager().Queue()
22 
23 # 阻塞的方式创建进程,
24 pl.apply(write,(q,))
25 pl.apply(read,(q,))
26 
27 # 关闭进程池
28 pl.close()
29 # 等待结束
30 pl.join()

运行结果:

35077 start-----
35078 is start(write)---父进程为----35077
put------- 0
put------- 1
put------- 2
put------- 3
put------- 4
35079 is start(write)---父进程为----35077
---get 0----
---get 1----
---get 2----
---get 3----
---get 4----