multiprocessing 多进程实现 生产者与消费者模型JoinableQueue
from multiprocessing import JoinableQueue
import time
import random
import asyncio
import logging
from multiprocessing import cpu_count
from multiprocessing import Process
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(levelname)s -->%(funcName)s at line %(lineno)d: \n %(message)s')
log= logging.getLogger()
# set max length of queue and limit concurrent numbers put
q_init = JoinableQueue(maxsize=5) async def jobs(item):
time.sleep(random.randint(1,4))
status = random.randint(0, 1)
if status == 0:
return ("success",item)
else:
return ("failed",item) async def do_work(item):
logging.info("do something %s,time start %s" % (item, time.asctime()))
a =await jobs(item)
return a def async_runner(checker):
new_loop = asyncio.new_event_loop()
asyncio.set_event_loop(new_loop)
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(do_work(checker))
loop.run_until_complete(asyncio.wait([task]))
st = task.result()
return st def worker_consumer(q_init):
while True:
if q_init.empty(): break
# logging.info("queue is empty , Stop Each Process BY Break " )
checker = q_init.get()
st=async_runner(checker)
if st[0] in ["success", "failed"]:
logging.info("%s task finished status is %s" % (st[1],st[0]))
# notify q.join() in producer,consumer has get element of queue
q_init.task_done() def producer(q_init):
for i in range(10):
q_init.put(i)
# block produce util consumer get all queue elements
q_init.join() if __name__ == '__main__':
# GET MAX CPU NUMBER OF MACHINE
cpu_count=cpu_count()
produce=[Process(target=producer,args=(q_init,))]
consums=[Process(target=worker_consumer,args=(q_init,)) for i in range(cpu_count)]
for p in produce:
p.start()
for c in consums:
c.start()
for pr in produce:
pr.join()
for c in consums:
c.join()
结果:
2019-12-21 19:50:00,754 - INFO --><module> at line 65:
cpucount is 8
2019-12-21 19:50:01,036 - INFO -->do_work at line 23:
do something 1,time start Sat Dec 21 19:50:01 2019
2019-12-21 19:50:01,038 - INFO -->do_work at line 23:
do something 2,time start Sat Dec 21 19:50:01 2019
2019-12-21 19:50:01,040 - INFO -->do_work at line 23:
do something 3,time start Sat Dec 21 19:50:01 2019
2019-12-21 19:50:01,041 - INFO -->do_work at line 23:
do something 4,time start Sat Dec 21 19:50:01 2019
2019-12-21 19:50:01,055 - INFO -->do_work at line 23:
do something 5,time start Sat Dec 21 19:50:01 2019
2019-12-21 19:50:02,042 - INFO -->worker_consumer at line 43:
4 task finished status is success
2019-12-21 19:50:02,043 - INFO -->do_work at line 23:
do something 6,time start Sat Dec 21 19:50:02 2019
2019-12-21 19:50:02,056 - INFO -->worker_consumer at line 43:
5 task finished status is success
2019-12-21 19:50:02,056 - INFO -->do_work at line 23:
do something 7,time start Sat Dec 21 19:50:02 2019
2019-12-21 19:50:03,041 - INFO -->worker_consumer at line 43:
3 task finished status is success
2019-12-21 19:50:03,042 - INFO -->do_work at line 23:
do something 8,time start Sat Dec 21 19:50:03 2019
2019-12-21 19:50:03,058 - INFO -->worker_consumer at line 43:
7 task finished status is success
2019-12-21 19:50:03,059 - INFO -->do_work at line 23:
do something 9,time start Sat Dec 21 19:50:03 2019
2019-12-21 19:50:04,036 - INFO -->worker_consumer at line 43:
1 task finished status is failed
2019-12-21 19:50:04,037 - INFO -->do_work at line 23:
do something 10,time start Sat Dec 21 19:50:04 2019
2019-12-21 19:50:04,043 - INFO -->worker_consumer at line 43:
6 task finished status is success
2019-12-21 19:50:04,059 - INFO -->worker_consumer at line 43:
9 task finished status is success
2019-12-21 19:50:05,039 - INFO -->worker_consumer at line 43:
2 task finished status is failed
2019-12-21 19:50:07,042 - INFO -->worker_consumer at line 43:
8 task finished status is success
2019-12-21 19:50:08,038 - INFO -->worker_consumer at line 43:
10 task finished status is failed Process finished with exit code 0
multiprocessing 多进程实现 生产者与消费者模型JoinableQueue的更多相关文章
- Python 之并发编程之进程下(事件(Event())、队列(Queue)、生产者与消费者模型、JoinableQueue)
八:事件(Event()) # 阻塞事件: e = Event() 生成事件对象e e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值 ...
- 进程对列,生产者和消费者,JoinableQueue
1.进程对列 让进程之间共享资源 先进先出 (1)基本语法 from multiprocessing import Process,Queue q = Queue() # 1.用put方法往队列中存值 ...
- 守护进程,互斥锁,IPC,队列,生产者与消费者模型
小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...
- python并发编程之守护进程、互斥锁以及生产者和消费者模型
一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...
- python:生产者与消费者模型
1,生产者与消费者模型的矛盾在于数据供需的不平衡 import time import random from multiprocessing import Queue from multiproce ...
- Java线程(学习整理)--4---一个简单的生产者、消费者模型
1.简单的小例子: 下面这个例子主要观察的是: 一个对象的wait()和notify()使用情况! 当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对 ...
- Python之生产者&、消费者模型
多线程中的生产者和消费者模型: 生产者和消费者可以用多线程实现,它们通过Queue队列进行通信. import time,random import Queue,threading q = Queue ...
- 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型
关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非 ...
- Spring MVC 使用介绍(七)—— 注解式控制器(三):生产者与消费者模型
一.MIME类型 MIME类型格式:type/subtype(;parameter)? type:主类型,任意的字符串,如text,如果是*号代表所有 subtype:子类型,任意的字符串,如html ...
随机推荐
- 二叉堆(2)LeftistHeap
左倾堆,用于堆的快速合并. 规则: ① 节点的键值小于或等于它的左右子节点的键值. ② 节点的左孩子的NPL >= 右孩子的NPL. ③ 节点的NPL = 它的右孩子的NPL + 1. 测试文件 ...
- 如何成为一名AI工程师
如何成为一名AI工程师 step 前端:js,html,找准方向开始累积知识! 计算机/数学专业 python anaconda IDE pycharm/jupyter 熟悉基础语法,了解数据结构 刷 ...
- php 时间 日期
获取月初与月末 /** * 获取当前月初与月末时间 * * */ $month =8; $year = 2019; $startDay = $year . '-' . $month . '-1'; $ ...
- 本机添加多IP绑定网站
查询IP 显示为1个IP 点击更改适配器 点击高级 进行添加IP 点击添加 ipconfig 查看效果 注~!:在IIS中可以在这里添加多IP然后绑定
- pl/sql快速输入select * from等语句快捷键设置
1.工具-->首选项 2.编辑器-->编辑 3.定义快捷键 -- > 保存 4.快捷键+回车就可以出现
- SVM-支持向量机(三)SVM回归与原理
SVM回归 我们之前提到过,SVM算法功能非常强大:不仅支持线性与非线性的分类,也支持线性与非线性回归.它的主要思想是逆转目标:在分类问题中,是要在两个类别中拟合最大可能的街道(间隔),同时限制间隔侵 ...
- Dubbo快速入门
Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用.这次创建两个应用,一个作为服务的提供方,一个作为服务的消费方.通过Dubbo来实现服务消费方远程调用服务提供方的方法. 服务提供 ...
- JFinal Enjoy指令扩展管理常用文本模板
个人博客 地址:http://www.wenhaofan.com/article/20190304102258 平时在项目中使用短信模板 邮件模板以及 站内消息通知等文本模板一般都是通过手动的字符串拼 ...
- R parallel包实现多线程1
并行执行 Yes! Well done! Socket clusters are initialized without variables, so a_global_var wasn't found ...
- HTML的表单初级验证
HTML的表单初级验证 placeholder(提示信息) required(确保不能为空) pattern(正则表达式验证) 1. placeholder(提示信息) 语法: <p>账号 ...