(9)进程---JoinableQueue队列
消费者模型-->存和取得过程
和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子
put 存入, get 获取
q.task_done 通过队列其中一个数据被处理,JoinableQueue 默认会计数,执行一次task_done减少一次队列数
JoinableQueue 里面有5个值,task_done减少一个,减到0 , 队列里面的值为空,然后发送消息给q,join,撤销阻塞,程序执行完毕!
q.join() 添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞
from multiprocessing import Process,JoinableQueue
import random
import time def consumer(q,name):
while True:
food = q.get()
time.sleep(random.uniform(0.5,1))
print("%s接受了 %s" % (name,food))
q.task_done() def producer(q,name,food):
for i in range(5):
time.sleep(random.uniform(0.3,0.8))
print("%s生产了 %s" % (name,food+str(i)))
q.put(food+str(i)) if __name__ == "__main__":
jq = JoinableQueue()
c1 = Process(target=consumer,args=(jq,"周金波"))
c1.daemon = True
c1.start() p1 = Process(target=producer,args= (jq,"张何伟","香吻"))
p1.start() p1.join() # 生产者需要把所有数据放到队列当中
#添加阻塞,直到放入队列的所有值都被处理掉的时候,撤掉阻塞
# 通过task_done 表达处理掉的意思
# join 和 task_done 需要配合使用;
jq.join()
执行结果:
张何伟生产了 香吻0
张何伟生产了 香吻1
周金波接受了 香吻0
张何伟生产了 香吻2
周金波接受了 香吻1
张何伟生产了 香吻3
张何伟生产了 香吻4
周金波接受了 香吻2
周金波接受了 香吻3
周金波接受了 香吻4
(9)进程---JoinableQueue队列的更多相关文章
- 并发编程 - 进程 - 1.队列的使用/2.生产者消费者模型/3.JoinableQueue
1.队列的使用: 队列引用的前提: 多个进程对同一块共享数据的修改:要从硬盘读文件,慢,还要考虑上锁: 所以就出现了 队列 和 管道 都在内存中(快): 队列 = 管道 + 上锁 用队列的目的: 进程 ...
- JoinableQueue队列,线程,线程于进程的关系,使用线程,线程的特点,守护线程,线程的互斥锁,死锁问题,递归锁,信号量
1.JoinableQueue队列 JoinableQueue([maxsize]):这就像是一个Queue对象,但是队列允许项目的使用者通知生成者项目已经被成功处理.通知进程是使用共享的信号和条件变 ...
- 进程同步控制(锁,信号量,事件), 进程通讯(队列和管道,生产者消费者模型) 数据共享(进程池和mutiprocess.Pool模块)
参考博客 https://www.cnblogs.com/xiao987334176/p/9025072.html#autoid-1-1-0 进程同步(multiprocess.Lock.Semaph ...
- python-线程进程与队列
线程,有时被称为轻量级进程,是程序执行流的最小单元线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指进行中的程序的调度单位.在单个程序中 ...
- Windows消息理解(系统消息队列,进程消息队列,非队列消息)
// ====================Windows消息分类==========================在Windows中,消息分为以下三类:标准消息——除WM_COMMAND之外,所 ...
- 进程锁,队列,JoinableQueue
内容梗概: 1.进程同步(锁) 2.队列(重点) 3.生产者消费者模式 4.JoinableQueue([maxsize]) 5.信号量(了解) 6.事件 1.进程同步(锁) 并发编程让我们能更加充分 ...
- python并发编程基础之守护进程、队列、锁
并发编程2 1.守护进程 什么是守护进程? 表示进程A守护进程B,当被守护进程B结束后,进程A也就结束. from multiprocessing import Process import time ...
- (8)进程---Queue队列
# IPC Inter-Process Communication # 实现进程之间通信的两种机制: # 管道 Pipe 用的很少 # 队列 Queue 队列的特征:现进先出,栈属于后进后出 基本语法 ...
- thinkphp 实现rabbitMq常驻进程消费队列
1,项目一级目录新建一个server文件 #!/usr/bin/env php <?php try { require __DIR__ . "/start.php"; } c ...
随机推荐
- Tree Implementation with Python
Tree Implementation with Python List of List 代码如下: def binary_tree(val): return [val, [], []] def in ...
- linux判断文件大小
第一条code ll -s | tail -n +2 | awk '$1 >= 10 {print $1,$10 "容量大于10"} $1 <= 9 {print $1 ...
- 热扩容LVM形式的/(根)分区(无损增大、缩小LVM分区)
警告! 本文为虚拟机环境,生产环境请务必在操作前优先备份重要数据! 再有,请确保所需扩充的分区为非进程占用分区 实验背景:当时规划系统分区时/(根)目录分配过小 实验目的 : 无损增大/(根)分区容量 ...
- EXP7 网络欺诈技术防范(修改版)
实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 1.简单应用SET工具建立冒名网站 2.ettercap DNS spoof 3.结合应用两种技术,用DNS s ...
- 网络 --- 3 socket模块 粘包
一 .socket 模块参数及方法 二.缓冲区 三.粘包 1.两种粘包现象 ①连续的小包可能会被优化算法给组合到一起进行发送 ②第一次如果发送的数据大小2000B接收端一次性接受大小为1024, 这就 ...
- topcoder srm 320 div1
problem1 link 两个数字后面都有阶乘符号,可以抵消. import java.util.*; import java.math.*; import static java.lang.Mat ...
- CNN Mnist
参考链接:https://www.codeproject.com/articles/16650/neural-network-for-recognition-of-handwritten-digi#I ...
- SpringBoot 使用okhttp3
1.添加pom.xml依赖 <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId& ...
- 3、My Scripts
.用for循环批量修改文件扩展名(P240) .使用专业改名命令rename来实现 .通过脚本实现sshd.rsyslog.crond.network.sysstat服务在开机时自动启动(P244) ...
- go helloworld
// Sample program to show how a bytes.Buffer can also be used // with the io.Copy function. package ...