队列:先进先出

# 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. Nginx 网站域名80 反向代理并且重定向到 tomcat 8080 网站固定页

    配置 server { listen 80 default_server; listen [::]:80 default_server; server_name :127.0.0.1:8080; 反向 ...

  2. MT【251】椭圆中的好题

    已知直线$l:x+y-\sqrt{3}=0$过椭圆$E:\dfrac{x^2}{a^2}+\dfrac{y^2}{b^2}=1,(a>b>0)$的右焦点且与椭圆$E$交于$A,B$两点,$ ...

  3. Leetcode 209.长度最小的子数组 By Python

    给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组.如果不存在符合条件的连续子数组,返回 0. 示例: 输入: s = 7, nums = [2, ...

  4. HDU 4549 M斐波那契数列(矩阵快速幂)

    题目链接:M斐波那契数列 题意:$F[0]=a,F[1]=b,F[n]=F[n-1]*F[n-2]$.给定$a,b,n$,求$F[n]$. 题解:暴力打表后发现$ F[n]=a^{fib(n-1)} ...

  5. mysql connections

    在使用MySQL数据库的时候,经常会遇到这么一个问题,就是“Can not connect to MySQL server. Too many connections”-mysql 1040错误,这是 ...

  6. iview 模态框点击确定按钮不消失

    <div slot="footer"> <Button type="text" size="large" @click=& ...

  7. 由AC自动机引发的灵感

    一,WA自动机 #include <cstdio> using namespace std; int main() { printf("☺"); ; } 二,TLE自动 ...

  8. Linux基本命令总结(三)

    接上篇: 11,more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示 ...

  9. Javascript深入之创建对象的多种方式以及优缺点

    1.工厂模式 function createPerson(name) { var o = new Object(); o.name = name; o.getName = function() { c ...

  10. 关于TSql

    1.Sql:结构化查询语言(Structrued  Query  Language) 2.TSql:是Sql语言的另一种版本,且只能在SqlServer中使用.和Sql不同的是,TSql中增加了对变量 ...