zoukankan      html  css  js  c++  java
  • 生产消费者模型代码示例

    import time
    import random
    from multiprocessing import Process,Queue
    def producer(q,name,food):
        for i in range(4):
            time.sleep(random.random())
            f = "{}生产出一个{}".format(name,food)
            print(f)
            q.put(f)
    def consumer(q,name):
        while True:
            food = q.get()
            if food is None:
                print("{}获取空,退出".format(name))
                break
            time.sleep(random.random())
            print("{}消费了一个{}".format(name,food))
    
    if __name__ == '__main__':
        q = Queue(10)
        p1 = Process(target=producer,args=(q,"生产者1号","包子"))
        p2 = Process(target=producer,args=(q,"生产者2号","馒头"))
        c1 = Process(target=consumer,args=(q,"消费者1号"))
        c2 = Process(target=consumer,args=(q,"消费者2号"))
        c3 = Process(target=consumer,args=(q,"消费者3号"))
        p1.start()
        p2.start()
        c1.start()
        c2.start()
        c3.start()
        p1.join()
        p2.join()
        q.put(None)
        q.put(None)
        q.put(None)
    View Code
    import time
    import random
    from multiprocessing import Process,JoinableQueue
    def producer(q,name,food):
        for i in range(4):
            time.sleep(random.random())
            f = "{}生产出一个{}".format(name,food)
            print(f)
            q.put(f)
        q.join()   #生产周期变长,要等到所生产的数据被处理完,这个子进程才结束
    def consumer(q,name):
        while True:
            food = q.get()
            time.sleep(random.random())
            print("{}消费了一个{}".format(name,food))
            q.task_done()
    
    if __name__ == '__main__':
        q = JoinableQueue(10)
        p1 = Process(target=producer,args=(q,"生产者1号","包子"))
        p2 = Process(target=producer,args=(q,"生产者2号","馒头"))
        c1 = Process(target=consumer,args=(q,"消费者1号"))
        c2 = Process(target=consumer,args=(q,"消费者2号"))
        c3 = Process(target=consumer,args=(q,"消费者3号"))
        p1.start()
        p2.start()
        c1.daemon = True  #设置为守护进程,主进程中的代码执行完毕之后,该守护进程自动结束
        c2.daemon = True
        c3.daemon = True
        c1.start()
        c2.start()
        c3.start()
        p1.join()   #感知一个进程的结束
        p2.join()
    View Code
  • 相关阅读:
    福大软工 · 第七次作业
    git分支重命名
    vscode左侧文件不同颜色标识含义
    正则表达式匹配指定字符区间的内容,且不包含指定字符
    git如何撤销工作区的修改
    git查看某个文件的提交历史
    扫盲篇--远程桌面连接
    git merge后如何撤销
    element-ui+vue-treeselect校验
    typeof 踩坑总结
  • 原文地址:https://www.cnblogs.com/superniao/p/10123168.html
Copyright © 2011-2022 走看看