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. 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新

    本节主要介绍在上一节中通过搭建基架而创建的Razor页面,并做一些UI改变. 一.创建.删除.详细信息和编辑页面 1.双击Pages/Movies/Index.cshtml.cs文件,这是一个Razo ...

  2. javascript初学笔记

    基本语句 赋值条件循环语句 javascript异常处理语句 trycatchfinally语句 Error对象 throw语句 函数 定义 调用 嵌套函数 函数的嵌套定义 内置函数 匿名函数和Fun ...

  3. jenkins - docker搭建jenkins

    jenkins镜像拉取 docker pull jenkins/jenkins 为jenkins镜像分配容器 docker run -d --name jenkins \ -p 8080:8080 \ ...

  4. html中引入调用另一个html文件

    第一种: <body> <div id="page1"></div> <div id="page2"></ ...

  5. win10驱动签名禁用与启动

    禁用:https://jingyan.baidu.com/article/624e74594dbc8d34e8ba5aa6.html?qq-pf-to=pcqq.c2c 启用或恢复:https://z ...

  6. [CF1034B] Longest Palindrome - 贪心

    如果自己是回文串可以做中心 如果一个串和另一个串的转置相等则可以凑一对 优先配对 #include <bits/stdc++.h> using namespace std; int n,m ...

  7. nice-validator判断表单是否验证通过

    $("#formSurvery").isValid(function(is){ if(is){ alert("通过!") } } 如果is为false则表示不通 ...

  8. XSS详解【1】---基本概念和攻击原理

    这节主要讲述XSS的基本概念和攻击原理. 一 XSS基本概念 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style She ...

  9. php 对接国外支付 ipay88支付

    ipay88支付 近期接了一个国外的项目,客户指定要这种支付,就搞搞呗,其实流程和思路都是差不多的,往下看 他的流程其实非常简单  下面的流程仔细看看,看懂了就会了 1 首先我们需要先获取下单所需要的 ...

  10. 笔记(tm_springboot)

    1.@change="getFile($event)" 2.File imageFolder= new File(request.getServletContext().getRe ...