【Python】队列queue 与 生产消费模型

# 管道型的处理方式  先进先出
# 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')
posted @ 2018-08-26 17:48  caya  阅读(216)  评论(0编辑  收藏  举报