加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 10:12:05 所属栏目:Python 来源:网络整理
导读:注意:如果要使用Pool(进程池方式)创建进程,就需要使用multiprocessing.Manager()中的 Queue(),而不是multiprocessing.Queue() import time import random from multiprocessing import Pool,Manager # 生产者 def producer(q,i): food = 'Spam-%d' % i
注意:如果要使用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')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读