欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python生产者和消费者模式实现(三)进程池方式

程序员文章站 2023-11-08 19:22:04
注意:如果要使用Pool(进程池方式)创建进程,就需要使用multiprocessing.Manager()中的 Queue(),而不是multiprocessing.Queue() import timeimport randomfrom multiprocessing import Pool, ......
注意:如果要使用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('时间:%s\t生产者:%d\t生产了 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('时间:%s\t消费者: %d\t吃了 %s' % (timeval, i, 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, (q, n))

producterpool.close()
producterpool.join()

for n in range(1, consumerpoolnum + 1):
q.put(none)

consumerpool.close()
consumerpool.join()

print('end')