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的更多相关文章

  1. Python 之并发编程之进程下(事件(Event())、队列(Queue)、生产者与消费者模型、JoinableQueue)

    八:事件(Event()) # 阻塞事件:    e = Event() 生成事件对象e    e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值 ...

  2. 进程对列,生产者和消费者,JoinableQueue

    1.进程对列 让进程之间共享资源 先进先出 (1)基本语法 from multiprocessing import Process,Queue q = Queue() # 1.用put方法往队列中存值 ...

  3. 守护进程,互斥锁,IPC,队列,生产者与消费者模型

    小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某 ...

  4. python并发编程之守护进程、互斥锁以及生产者和消费者模型

    一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...

  5. python:生产者与消费者模型

    1,生产者与消费者模型的矛盾在于数据供需的不平衡 import time import random from multiprocessing import Queue from multiproce ...

  6. Java线程(学习整理)--4---一个简单的生产者、消费者模型

     1.简单的小例子: 下面这个例子主要观察的是: 一个对象的wait()和notify()使用情况! 当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对 ...

  7. Python之生产者&、消费者模型

    多线程中的生产者和消费者模型: 生产者和消费者可以用多线程实现,它们通过Queue队列进行通信. import time,random import Queue,threading q = Queue ...

  8. 【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型

    关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非 ...

  9. Spring MVC 使用介绍(七)—— 注解式控制器(三):生产者与消费者模型

    一.MIME类型 MIME类型格式:type/subtype(;parameter)? type:主类型,任意的字符串,如text,如果是*号代表所有 subtype:子类型,任意的字符串,如html ...

随机推荐

  1. Centos7 同时运行PHP5.2和PHP7.1配置

    工作环境一直都是lnmp,其中PHP已经升级到7.1版本了.突然有份代码需要运行在PHP5.2上.但是之前的环境还是需要的,所以需要在centos中再安装PHP5.2. 0.之前的php7安装在/us ...

  2. paramiko 基于密钥文件登陆

    首先密钥登陆远程的原理 client 端 将公钥放在远程机器authorized_keys: 使用 ssh-copy-id  app@ip 接着在client机器生成密钥 使用ssh-keygen - ...

  3. mysql 视图 触发器 存储过程 函数事务 索引

    mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当 ...

  4. C++-蓝桥杯-入门训练

    Fibonacci数列,快速幂 #include <cstdio> ][];}; ,MOD=; Matrix A,B,O,I; Matrix Mul(Matrix A,Matrix B){ ...

  5. SVM-支持向量机(二)非线性SVM分类

    非线性SVM分类 尽管SVM分类器非常高效,并且在很多场景下都非常实用.但是很多数据集并不是可以线性可分的.一个处理非线性数据集的方法是增加更多的特征,例如多项式特征.在某些情况下,这样可以让数据集变 ...

  6. layer弹出层右上角的关闭按钮怎么没有显示

    问题描述:layer弹出层右上角的关闭按钮怎么没有显示,但鼠标移上去又可以点击 解决方式: 这是因为样式中需要一个图标,你的项目中缺少.解决如下:1.下载图标:http://www-x-zi-han- ...

  7. c#后端 小程序上传图片

    c#后端: /// <summary> /// 上传图片 /// </summary> /// <returns></returns> [HttpPos ...

  8. ansible笔记(14):循环(一)

    在使用ansible的过程中,我们经常需要处理一些返回信息,而这些返回信息中,通常可能不是单独的一条返回信息,而是一个信息列表,如果我们想要循环的处理信息列表中的每一条信息,我们该怎么办呢?这样空口白 ...

  9. wget安装nginx

    #下载: wget http://nginx.org/download/nginx-1.8.0.tar.gz #解压: tar -zxvf nginx-1.8.0.tar.gz #安装依赖插件 yum ...

  10. STL初学

    标准模板库STL初学 线性数据结构 vector 一维向量,相当于数组 list 链表 map 映射,提供(Key,Value)式操作,相当于哈希表 string char字符串 queue 队列,先 ...