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. 软件工程概论,java web项目

    需要网站系统开发需要掌握的技术: 实施Java的WEB项目需要掌握的技术如:面向对象分析设计思想,设计模式和框架结构,XML语言,网页脚本语言,数据库,应用服务器,集成开发环境Java语言是完全面向对 ...

  2. ZOJ1310-Robot (BFS)

    The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...

  3. ReportViewer Win32Exception (0x80004005): 创建窗口句柄时出错

    System.ComponentModel.Win32Exception (0x80004005): 创建窗口句柄时出错. 在 System.Windows.Forms.NativeWindow.Cr ...

  4. 1080 Graduate Admission

    大致题意就是有N个学生,有M个学校,每个学校的名额都是正整数.每个学生可以填K个学校志愿,N个学生一起排名以后,排名高的学生先挑学校,不保护一志愿. 题目要求: 首先,把所有学生按总成绩SUM(GE+ ...

  5. bootstrap-datatimepicker插件的使用

    1.引入相关的css.js文件(因为是bootstrap的,首先应该引入bootstrap.css和bootstrap.js): <link rel="stylesheet" ...

  6. Keep、小红书、美图…独角兽App能拿到新一轮救命钱吗?

    大多数人热爱手机,不是因为时尚的外观或者结实的零部件,而是因琳琅满目的App赋予其太多的功能.智能手机最先是清理掉人类的零碎时间,现如今又开始肢解我们大块的时间,或者说,智能手机本身就是生活.在如此背 ...

  7. oracle三个网络配置文件(listener.ora、tnsname.ora、sqlnet.ora)的作用

    oracle网络配置 三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME\network\admin目录下. 1.  sqlne ...

  8. android studio编译包真机安装失败解决方案记录

    Android studio升级到3.0之后,编译的APK文件无法在真机上安装,提示安装失败,最开始以为是API版本过高,与手机的版本不兼容,然后降低API,结果依然是安装失败. 然后连接手机,直接调 ...

  9. PHP 把秒数转为时分秒格式

    PHP函数 1.gmdate $seconds = 174940;$hours = intval($seconds/); $time1 = $hours."小时".gmdate(' ...

  10. Entry小部件:

    导入tkinter import Tkinter from Tinter import * import tkinter from tinter import * 实例化Tk类 root=tkinte ...