小菜:
from multiprocessing import Process,Queue
import time,os,random
def procducer(q):
for i in range(10):
res = '包子%s'%i
time.sleep(0.5)
q.put(res)
print('%s 生产了 %s'%(os.getpid(),res))
def consumer(q):
while True:
res = q.get()
if res is None:
break
print('%s 吃 %s'%(os.getpid(),res))
time.sleep(random.randint(2,3))
if __name__ == '__main__':
q = Queue()
p = Process(target=procducer,args=(q,))
c = Process(target=consumer,args=(q,))
p.start()
c.start()
p.join()
q.put(None)
print('主')
大招:
from multiprocessing import Process,Queue,JoinableQueue
import time,random,os
def procducer(food,q):
for i in range(3):
res='%s%s' %(food,i)
time.sleep(0.5)
q.put(res)
print('%s 生产了 %s' %(os.getpid(),res))
q.join() #为了让p不死,内含计数器,(9)
def consumer(q):
while True:
res=q.get()
print('%s 吃 %s' %(os.getpid(),res))
time.sleep(random.randint(2,3))
q.task_done() # 让q.join 计数器逐个减一
if __name__ == '__main__':
q=JoinableQueue()
p1=Process(target=procducer,args=('包子',q,))
p2=Process(target=procducer,args=('泔水',q,))
p3=Process(target=procducer,args=('狗粮',q,))
c1=Process(target=consumer,args=(q,))
c2=Process(target=consumer,args=(q,))
c1.daemon=True ## 就加了个守护进程。
c2.daemon=True
p1.start()
p2.start()
p3.start()
c1.start()
c2.start()
p1.join() #为了让主进程不死
p2.join()
p3.join()
#生产者结束--->q.join()----->消费者确实把所有数据都收到
print('主',os.getpid())
为你钟情 --- 张先生