zoukankan      html  css  js  c++  java
  • python生产者和消费者模式实现(三)进程池方式

    注意:如果要使用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 生产者:%d 生产了 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 消费者: %d 吃了 %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')

  • 相关阅读:
    Scala语言
    Eclipse的各种问题
    Java:
    Come on
    问题:实现继承的抽象方法
    Android:报错AndroidManifest.xml file missing
    正则表达式
    Android:相对布局Relativeyout中的属性解释
    Android:生命周期案例
    Android:设置APP全屏、横屏、竖屏、常亮的方法
  • 原文地址:https://www.cnblogs.com/WebLinuxStudy/p/11776832.html
Copyright © 2011-2022 走看看