您的位置:首页 > 其它

生产者与消费者模型(重要)

2017-12-05 17:07 316 查看

小菜:

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())

为你钟情 --- 张先生
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: