python 进程Queue
1、作用:进程之间的数据交互
2、常用方法
"""
对象.put()
作用:放入队列一个数据
对象.get()
作用:取队列一个数据,若队列没有值,则阻塞
对象.empty()
作用:判断队列是否为空
对象.full()
作用:判断队列是否为满 """
3、例子
"""
子进程Process-1 和 子进程Process-2进行数据传输
"""
from multiprocessing import Queue
from multiprocessing import Process def new_put(q):
q.put('你好') def new_get(q):
ret = q.get()
print(ret) if __name__ == '__main__':
q = Queue()
p = Process(target=new_put, args=(q, ))
p.start()
print(p.name)
g = Process(target=new_get, args=(q, ))
g.start()
print(g.name)
4、生产者消费者模型
import time
import random
from multiprocessing import Process
from multiprocessing import Queue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f) def consumer(name, q):
while 1:
f1 = q.get()
if f1 is None:
break
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2)) if __name__ == '__main__':
q = Queue()
p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.start()
p.join()
p2.join()
q.put(None)
q.put(None)
优化
import time
import random
from multiprocessing import Process
from multiprocessing import JoinableQueue def producer(name, food, q):
for i in range(6):
f = '%s生产%s%s' % (name,food, i)
print(f)
time.sleep(random.randint(1, 3))
q.put(f)
q.join() def consumer(name, q):
while 1:
f1 = q.get()
f = '********************%s吃%s' % (name, f1)
print(f)
time.sleep(random.randint(1, 2))
q.task_done() if __name__ == '__main__':
q = JoinableQueue() p = Process(target=producer, args=('tom', '包子', q))
p.start()
p2 = Process(target=producer, args=('joker', '馒头', q))
p2.start()
c1 = Process(target=consumer, args=('wt', q))
c1.daemon = True
c1.start()
c2 = Process(target=consumer, args=('son', q))
c2.daemon = True
c2.start()
p.join()
p2.join()
过程:主进程等待->生产者进程,生产者等待->消费者
p.join()->q.join()->c,task_down()
obj.join()
作用:阻塞,直到队列里的所有值被处理,一般在生产者进程中和put()方法一起使用
obj.task_down()
作用:向q.join()发送信号量,表名q.get()的值,已经被处理
注意:给消费者设置守护进程,队列的数据处理完毕后,消费者再执行下去,没有意义
python 进程Queue的更多相关文章
- Python开发【笔记】:what?进程queue还能生产出线程!
进程queue底层用线程传输数据 import threading import multiprocessing def main(): queue = multiprocessing.Queue() ...
- python 进程和线程
python中的进程.线程(threading.multiprocessing.Queue.subprocess) Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就 ...
- Python 进程
安装Python的paramiko模块 步骤: 1:管理员方式打开cmd,切换到python安装路径的Scripts目录下: 2:执行命令: 1 pip3.5.exe install paramiko ...
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python——进程、线程、协程
Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env pytho ...
- Python 进程之间共享数据
最近遇到多进程共享数据的问题,到网上查了有几篇博客写的蛮好的,记录下来方便以后查看. 一.Python multiprocessing 跨进程对象共享 在mp库当中,跨进程对象共享有三种方式,第一种 ...
- Python 进程间数据交互
进程间通信:进程之间必须需要中间件. 不同进程间内存是不共享的,要想实现两个进程间的数据交换 Queues:实现传输两个进程的数据 线程queue,访问数据只能在一个进程内进行线程与线程之间的 ...
- Python中Queue模块及多线程使用
Python的Queue模块提供一种适用于多线程编程的FIFO实现.它可用于在生产者(producer)和消费者(consumer)之间线程安全(thread-safe)地传递消息或其它数据,因此多个 ...
随机推荐
- ASP.NET Core 开启后台任务
本文告诉大家如何通过 Microsoft.Extensions.Hosting.BackgroundService 开启后台任务 实现 BackManagerService 类继承 Backgroun ...
- H3C设置时间--用户视图下
<H3C>clock datetime ? TIME Specify the time (HH:MM:SS) <H3C>clock datetime 19:29:00 ? ...
- 【t056】智力问答(multiset做法)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的 ...
- 实现页面查看xml或json数据类似控制台效果
在前端查看xml或者json数据时,实现在类似与控制台中console的效果. 配合Ant Design的Collapse折叠面板进行展示. Collapse组件的地址:https://ant.des ...
- java 环境 笔记
1. 下载idea https://blog.csdn.net/yl1712725180/article/details/80309862 破解方法: 针对20 ...
- hive查询中文乱码问题
问题1. hue中中文字符乱码问题,重现步骤如下 create external table test_1_txt (id int, name varchar(100)) location '/tm ...
- Find工具
Find工具主要用于操作系统文件.目录的查找, 1.语法参数格式为: Find工具的语法格式:find path(路径) -option(参数) action(动作): PATH路径:可以任意路径.绝 ...
- Channel 9视频整理【3】
Will 保哥 微软mvp https://channel9.msdn.com/Niners/Will_Huang 繁体中文视频 Visual Studio 2017 新功能探索 https://ch ...
- DEVOPS技术实践_12:创建持续集成的管道
持续集成不仅包含了Jenkins或者相关其它的CI工具,也包含了包含代码如何控制,采用的什么分支策略等.不同的组织可能采用不同的类型的策略来完成CI,策略类型和项目的类型的有很大的关系. 一 分支策略 ...
- 用c++ 给易语言写支持库学习记录
废话我就不对说 直接开始 易语言官方下载的易语言安装路径下 有一个SDK文件夹 我们点进入cpp文件夹里面提供是c++的SDK elib文件夹里就是sdk 我们新建一个win32项目 这里我用的是VS ...