注意:如果要使用Pool(进程池方式)创建进程,就需要使用multiprocessing.Manager()中的 Queue(),而不是multiprocessing.Queue()
import time import random from multiprocessing import Pool,Manager
# 生产者 def producer(q,i): food = 'Spam-%d' % i time.sleep(random.uniform(1,2)) timeVal = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) print('时间:%st生产者:%dt生产了 Spam-%d' % (timeVal,i,i)) q.put(food)
# 消费者 def consumer(q,i): while True: food = q.get() if not food: break time.sleep(random.uniform(1,2)) timeVal = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) print('时间:%st消费者: %dt吃了 %s' % (timeVal,food))
if __name__ == '__main__': q = Manager().Queue()
producterNum = 50 producterPoolNum = 5 producterPool = Pool(producterPoolNum) for n in range(1,producterNum + 1): producterPool.apply_async(producer,(q,n))
consumerPoolNum = 5 consumerPool = Pool(consumerPoolNum) for n in range(1,consumerPoolNum + 1): consumerPool.apply_async(consumer,n))
producterPool.close() producterPool.join()
for n in range(1,consumerPoolNum + 1): q.put(None)
consumerPool.close() consumerPool.join()
print('end')
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|