队列:先进先出

# 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())
生产者消费模型
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('主...')

队列 Queue 与 生产者消费模型的更多相关文章

  1. Python学习笔记——进阶篇【第九周】———线程、进程、协程篇(队列Queue和生产者消费者模型)

    Python之路,进程.线程.协程篇 本节内容 进程.与线程区别 cpu运行原理 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Ev ...

  2. Python 第九篇:队列Queue、生产者消费者模型、(IO/异步IP/Select/Poll/Epool)、Mysql操作

    Mysql操作: grant select,insert,update,delete on *.* to root@"%" Identified by "123456&q ...

  3. go 语言之 生产者消费模型

    简易的生产者消费模型,通过管道[也可以理解为队列],管道是先进先出,主要是理解chan 生产者使用make将chan初始化,并且设置chan长度,如果不设置,生产者就写入不了通道 go 是使用线程开始 ...

  4. Python守护进程、进程互斥锁、进程间通信ICP(Queue队列)、生产者消费者模型

    知识点一:守护进程 守护进程:p1.daemon=True 守护进程其实就是一个“子进程“,守护=>伴随 守护进程会伴随主进程的代码运行完毕后而死掉 进程:当父进程需要将一个任务并发出去执行,需 ...

  5. python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  6. 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)

    参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...

  7. python开发进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型

    一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...

  8. 用阻塞队列实现一个生产者消费者模型?synchronized和lock有什么区别?

    多线程当中的阻塞队列 主要实现类有 ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO原则对元素进行排序 LinkedBlockingQueue是一个基于链表结构的 ...

  9. Day9 进程同步锁 进程队列 进程池 生产消费模型 进程池 paramike模块

    进程同步锁: 当运行程序的时候,有可能你的程序同时开多个进程,开进程的时候会将多个执行结果打印出来,这样的话打印的信息都是错乱的,怎么保证打印信息是有序的呢? 其实也就是相当于让进程独享资源. fro ...

随机推荐

  1. IDEA @Contract annotation

    IDEA @Contract annotation ----------------------------------- http://www.jetbrains.com/help/idea/con ...

  2. 【Gym 100971G】Repair

    BUPT 2017 summer training (for 16) #1B 题意 Alex is repairing his country house. He has a rectangular ...

  3. 自学Python3.3-函数分类(内置函数补充)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  4. 【BZOJ3716】[PA2014]Muzeum(贪心,网络流)

    [BZOJ3716][PA2014]Muzeum(贪心,网络流) 题面 BZOJ 题解 很明显可以写最大权闭合子图,然后会\(TLE\)成傻逼. 为了方便,就把一个警卫能够看到的范围处理一下(把坐标系 ...

  5. Entity Framework 问题集锦

    作者:疯吻IT 出处:http://fengwenit.cnblogs.com 1. No Entity Framework provider found for the ADO.NET provid ...

  6. 「TJOI2015」旅游 解题报告

    「TJOI2015」旅游 LCT沙比题 考虑我们其实是在维护一条链的\(\max\limits_{i<j} v_j-v_i\) 每次直接拿左右子树更新一下就可以了 写的时候把两个方向都维护一下, ...

  7. 构建SSH服务

    什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录.如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露.最 ...

  8. jsp model1

    一.model1(纯jsp技术): 1.dao:data access object,数据访问对象,即专门对数据库进行操作的类,一般说dao不含业务逻辑. 2.当进行跳转时候,需要用servlet来实 ...

  9. MongoDB常用操作命令

    查看所有数据库: > show dbs; 选定数据库: > use ECommerce; 查看当前数据库状态: > db.stats(); 查看当前数据库中所有集合: > sh ...

  10. A1126. Eulerian Path

    In graph theory, an Eulerian path is a path in a graph which visits every edge exactly once. Similar ...