Python生产者producer和consumer消费者案例写法,含有多线程,包含队列queue、JoinableQueue队列的用法
import time
import random
import queue
from multiprocessing import Process,Queue
案例一:
def consumer(q,name):
while True:
food = q.get()
if food is None:
break
time.sleep(random.uniform(0.5,1))
print('%s消费了%s'%(name,food)) def producer(q,name,food):
for i in range(5):
time.sleep(random.uniform(0.3,0.8))
print('%s生产了%s'%(name,food))
q.put(food+str(i)) if __name__ == '__main__':
q = Queue()
c1 = Process(target=consumer, args=(q, "消费者1"))
c2 = Process(target=consumer, args=(q, "consuer2"))
# c1.daemon = True
c1.start()
c2.start()
p1 = Process(target=producer, args=(q, "生产者1", "产品1"))
p2 = Process(target=producer, args=(q, "生产者2", "产品2"))
p1.start()
p2.start() p1.join()
p2.join()
q.put(None)
q.put(None)
案例二:
承接上面导入的包
from multiprocessing import Process,JoinableQueue def consumer(q,client):
while True:
product = q.get()
time.sleep(random.uniform(0.6,2.2))
print('%s购买了 %s' %(client,product))
q.task_done() def producer(q,client,product):
for i in range(5):
time.sleep(random.uniform(0.2,0.9))
print('%s 制造了 %s' %(client,product+str(i)))
q.put(product+str(i)) if __name__ == '__main__':
jq = JoinableQueue()
p1 = Process(target=consumer,args=(jq,'消费者one'))
p1.daemon = True
p1.start() p2 = Process(target=producer,args=(jq,'生产者one','黄金'))
p2.start()
p2.join()
jq.join()
二的执行结果之一:
生产者one 制造了 黄金0
生产者one 制造了 黄金1
生产者one 制造了 黄金2
消费者one购买了 黄金0
生产者one 制造了 黄金3
生产者one 制造了 黄金4
消费者one购买了 黄金1
消费者one购买了 黄金2
消费者one购买了 黄金3
消费者one购买了 黄金4
Python生产者producer和consumer消费者案例写法,含有多线程,包含队列queue、JoinableQueue队列的用法的更多相关文章
- python编写producer、consumer
自主producer.consumer 首先在不同的终端,分别开启两个consumer,保证groupid一致 ]# python consumer_kafka.py 执行一次producer ]# ...
- Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现
队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- ...
- 生产者和消费者模型producer and consumer(单线程下实现高并发)
#1.生产者和消费者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.s ...
- python生产者消费者模型
业界用的比较广泛,多线程之间进行同步数据的方法,解决线程之间堵塞,互相不影响. server --> 生产者 client --> 消费者 在一个程序中实现又有生产者又有消费者 ,生产者不 ...
- java学习之生产者和消费者案例
package com.gh.thread; /** * 生产者和消费者案例 * wait和sleep的区别 * wait不让出监视器锁,sleep让出监视器的锁 * @author ganhang ...
- Python 生产者与消费者模型
定义: 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题.该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度. 为什么要使用生产者和消费者模式 在线程世界里,生 ...
- GUC-13 生产者和消费者案例-旧
/* * 生产者和消费者案例 */ public class TestProductorAndConsumer { public static void main(String[] args) { C ...
- GUC-13 生产者消费者案例
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...
- [b0029] python 归纳 (十四)_队列Queue实现生产者消费者
# -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue imp ...
随机推荐
- svn 安装
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- Oracle游标使用
Oracle游标介绍: --声明游标 CURSOR cursor_name IS select_statement --For 循环游标 --()定义游标 --()定义游标变量 --()使用for循环 ...
- puppeteer(六)启动参数——浏览器扩展应用的添加及应用
前言 最近再做浏览器的自动化,首页是定制化的,是通过extension(扩展)实现的,由于通过puppeteer默认是以无参(即首次以干净的环境)运行的,导致登录页无法正常显示,首先想当然是直接找扩展 ...
- Delphi中PointerMath指令
Type Switch Syntax {$POINTERMATH ON} or {$POINTERMATH OFF} Default {$POINTERMATH OFF} Sc ...
- python __str__() 和 __repr__()是干啥的
1. 没定义__str__() print的时候得不到自己想要的东西 类默认转化的字符串基本没有我们想要的一些东西,仅仅包含了类的名称以及实例的 ID (理解为 Python 对象的内存地址即可).虽 ...
- 基于PLC1850平台的ARP包请求与响应
一.以太网ARP报文格式 ①.以太网目的地址:占6个字节(接收方的MAC地址,不清楚时发广播地址:FF-FF-FF-FF-FF-FF) ②.以太网源地址:占6个字节(发送方的MAC地址) ③.帧类型: ...
- (Review cs231n) Spatial Localization and Detection(classification and localization)
重在图像的定位和检测的内容. 一张图片中只有一种给定类别标签的对象,定位则是图像中有对象框:再这些类中,每一个训练目标都有一个类和许多的图像内部对应类的位置选框. 猜想的仅是类标签,不如说它们是位置 ...
- 服务器被疑似挖矿程序植入,发现以及解决过程(建议所有使用sonatype/nexus3的用户清查一下)
此次服务器被植入挖矿程序发现起来较为巧合,首先是上周三开始,我通过sonatype/nexus3搭建的仓库间歇性崩溃,但是每次重新start一下也能直接使用所以没有彻底清查,去docker logs里 ...
- win10电脑只有自带浏览器能上网
今天遇到了个奇葩问题,开机后登陆微信,怎么也登陆不上,用360检测,修复不了,找来大神一枚,打开我的Edge浏览器,各种网页浏览正常.......就告诉我就修好了.WTF!!! 现象:只有自带浏览器能 ...
- 5.JAVA基础复习——JAVA中的static关键字作用与用法
static关键字: 特点: 1.static是一个修饰符,用于修饰成员.(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量. 2.static修饰的成员被所有的对象共享. 3. ...