zoukankan      html  css  js  c++  java
  • 队列 Queue 与 生产者消费模型

    队列:先进先出

    # from multiprocessing import  Queue
    # Q = Queue(4)
    
    # Q.put('a')
    # Q.put('b')
    # Q.put('b')
    # Q.put('c')
    
    # print(Q.get())
    # print(Q.get())
    # print(Q.get())
    # print(Q.get())
    View Code
    生产者消费模型
    from multiprocessing import Process,Queue
    import random,time
    
    def product(name,food,Q):
        for i in range(3):
            res = '%s %s'%(food,i)
            Q.put(res)
            time.sleep(random.randint(1,3))
            print('%s 生产了 %s' %(name,res))
    
    def consumer(name,Q):
        while True:
            res = Q.get()
            if res is None:break
            time.sleep(random.randint(1,3))
            print('%s 吃了 %s' % (name, res))
    
    if __name__ == '__main__':
        Q = Queue()
        p1 = Process(target=product,args=('wxx','包子',Q))   # 生产者
        p2 = Process(target=product, args=('yxx', '馒头', Q))  # 生产者
        p3 = Process(target=product, args=('zxx', '粉丝', Q))  # 生产者
    
        c1 = Process(target=consumer,args=('axx',Q))  # 消费者
        c2 = Process(target=consumer, args=('bxx', Q))  # 消费者
    
        p1.start()
        p2.start()
        p3.start()
    
        c1.start()
        c2.start()
    
        p1.join()
        p2.join()
        p3.join()
    
        Q.put(None)
        Q.put(None)
    
        print('主...')
    模型1
    from multiprocessing import Process,JoinableQueue
    import random,time

    def product(name,food,Q):
    for i in range(3):
    res = '%s %s'%(food,i)
    Q.put(res)
    time.sleep(random.randint(1,3))
    print('%s 生产了 %s' %(name,res))

    def consumer(name,Q):
    while True:
    res = Q.get()
    time.sleep(random.randint(1,3))
    print('%s 吃了 %s' % (name, res))
    Q.task_done() # 队列取完信号

    if __name__ == '__main__':
    Q = JoinableQueue() # 队列链接
    p1 = Process(target=product,args=('wxx','包子',Q)) # 生产者
    p2 = Process(target=product, args=('yxx', '馒头', Q)) # 生产者
    p3 = Process(target=product, args=('zxx', '粉丝', Q)) # 生产者

    c1 = Process(target=consumer,args=('axx',Q)) # 消费者
    c2 = Process(target=consumer, args=('bxx', Q)) # 消费者

    c1.daemon = True
    c2.daemon = True

    p1.start()
    p2.start()
    p3.start()

    c1.start()
    c2.start()

    p1.join()
    p2.join()
    p3.join() # 保证生产者生产完

    Q.join() # 保证队列取完

    print('主...')
  • 相关阅读:
    fatal error LNK1123: 转换到 COFF 期间失败:文件无效或损坏
    CI:模拟进化与遗传算法
    贝叶斯网络
    朴素贝叶斯模型
    概率与不确定性(乘法法则与贝叶斯法则)
    关于“启发式”搜索的一个形象解释
    Python 字符串与数字拼接报错
    无法启动此程序因为计算机中丢失 xxx.dll
    Python 以指定的概率选取元素
    验证码之SimpleCaptcha (二)
  • 原文地址:https://www.cnblogs.com/liu--huan/p/9598592.html
Copyright © 2011-2022 走看看