# 管道型的处理方式 先进先出
# from multiprocessing import Queue
#
# q = Queue(3)
# q.put('hello') # 放入数据
# q.put('hello1') # 放入数据
# q.put('hello2') # 放入数据
# print(q.get()) # 取出数据
# print(q.get()) # 取出数据
# print(q.get()) # 取出数据
import time
from multiprocessing import Process,JoinableQueue
def consumer(q, name):
while 1:
res = q.get()
if res == 1:
q.task_done() # 每拿一个提醒一次
continue
elif not res:
break
time.sleep(1)
print('吃货%s' % name, '吃了 %s ' % res)
q.task_done() # 发送信号给q.join(),说明已经从队列中取走一个数据并处理完毕了
def producer(q, name):
for i in range(1, 3):
res = '包子 %s' % (name*i)
time.sleep(1)
print('厨子%s' % name, '生产了 %s' % res)
q.put(res)
q.join() # 等到消费者把自己放入队列中的所有的数据都取走之后,生产者才结束
if __name__ == '__main__':
# 容器
q = JoinableQueue()
q.put(1)
# 生产者
for i in range(1,7):
p = Process(target=producer, kwargs={'q': q, 'name': i})
p.start()
# 消费者
for i in range(1, 3):
c = Process(target=consumer, kwargs={'q': q, 'name': i})
c.daemon = True
c.start()
p.join()
print('hello')