博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产消费者模型代码示例
阅读量:6485 次
发布时间:2019-06-23

本文共 1906 字,大约阅读时间需要 6 分钟。

import timeimport randomfrom multiprocessing import Process,Queuedef 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 timeimport randomfrom multiprocessing import Process,JoinableQueuedef 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

 

转载于:https://www.cnblogs.com/superniao/p/10123168.html

你可能感兴趣的文章
Bash: how to check if a process id (PID) exists
查看>>
Mirantis Fuel fundations
查看>>
启动Tomcat一闪而过——分析及解决过程
查看>>
Android intent action大全
查看>>
使用 Flash Builder 的 Apple iOS 开发过程
查看>>
RabbitMq_05_Topics
查看>>
redis.conf
查看>>
SCALA中的函数式编程
查看>>
将List<int> 转换为用逗号连接为字符串
查看>>
C/C++中extern关键字详解
查看>>
Eclipse 最有用的快捷键
查看>>
K & DN 的前世今生(微软开源命名变革)
查看>>
--@angularJS--angular与BootStrap3的应用
查看>>
10款很好用的 jQuery 图片滚动插件
查看>>
Flask服务入门案例
查看>>
ReadWriteLock与ReentrantReadWriteLock
查看>>
Atitit.软件命名空间 包的命名统计 及命名表(2000个名称) 方案java package...
查看>>
新手指导:教你如何查看识别hadoop是32位还是64位
查看>>
Codeforces Round #180 (Div. 2) D. Fish Weight 贪心
查看>>
Gradle sourceCompatibility has no effect to subprojects(转)
查看>>