进程通信IPC机制

一、进程间通信

 1 from multiprocessing import Queue
 2 
 3 q = Queue(5) # 括号内可以传参数,表示的是这个队列的最大存储数
 4 # 往队列中添加数据
 5 q.put(1)
 6 q.put(2)
 7 q.put(3)
 8 print((q.full())) #判断队列是否满了
 9 q.put(4)
10 q.put(5)
11 print(q.full())
12 q.put(6) # 当队列满了之后 再放入数据 不会报错 会原地等待 直到队列中有数据被取走(阻塞态)
13 
14 print(q.get())
15 print(q.get())
16 print(q.get())
17 print(q.empty()) #判断队列中的数据是否取完
18 print(q.get())
19 print(q.get())
20 print(q.empty())
21 print(q.get_nowait()) # 取值 没有值不等待直接报错
22 print(q.get()) # 当队列中的数据取完之后 再次获取 程序会阻塞 直到有人往队列中放入值
23 
24 '''
25 full
26 get_nowait
27 empty
28 都不适用于多进程的情况
29 '''

二、进程间通信PCI机制

 1 from multiprocessing import Process,Queue
 2 
 3 def producer(q):
 4     q.put('hey guy')
 5 
 6 def cousumer(q):
 7     print(q.get())
 8 
 9 
10 if __name__ == '__main__':
11     q = Queue()
12     p = Process(target=producer,args=(q,))
13     c = Process(target=cousumer,args=(q,))
14     p.start()
15     c.start()

三、生产者消费者模型

 1 from multiprocessing import Process,JoinableQueue
 2 import time
 3 import random
 4 
 5 def producer(name,food,q):
 6     for i in range(10):
 7         data = '%s制作了%s'%(name,food)
 8         time.sleep(random.random())
 9         q.put(data)
10         print(data)
11 
12 def consumer(name,q):
13     while True:
14         data = q.get()
15         if data == None:break
16         print('%s吃了%s'%(name,data))
17         time.sleep(random.random())
18         q.task_done() #告诉队列你已经从队列中取出了一个数据 并且处理完毕了
19 
20 if __name__ == '__main__':
21     q = JoinableQueue()
22     p = Process(target=producer,args=('大厨egon','黄焖鸡米饭',q))
23     p1 = Process(target=producer,args=('跟班tank','生蚝',q))
24     c = Process(target=consumer,args=('吃货jerry',q))
25     c1 = Process(target=consumer,args=('吃货jason',q))
26     p.start()
27     p1.start()
28     c.daemon = True
29     c1.daemon = True
30     c.start()
31     c1.start()
32     p.join()
33     p1.join()
34 
35     q.join() # 等待队列中数据全部取出
原文地址:https://www.cnblogs.com/spencerzhu/p/11340792.html