python 异步 生产者 消费者_python 线程通信 生产者与消费者

1 """

2 线程通信的生产者与消费者3 python的queue模块中提供了同步的线程安全的队列类,都具有原子性,实现线程间的同步4 Queue (FIFO: fist in fist out)5 LifoQueue (LIFO: last in fist out)6 PriorityQueue (优先级队列)7

8 task_done():9 作用是在使用join()的时候,当queue中所有的项目都被取出,且每个项目取出后都使用了task_done(),那么就可以释放join()阻塞10 系统解释如下:11 用于消费者,每次get()以后,使用task_done() 是告诉队列正在处理的get任务完成12 如果join()当前处于阻塞状态,那么当处理完所有项时它将继续运行(这意味着对于已经放入队列的每个项都接收到task_done()调用)。13 如果调用的次数超过在队列中放置的项的次数,则引发ValueError错误。14

15 如果不需要join()的时候也可以不使用task_done()16

17

18 """

19 importqueue20 importthreading21 importtime22 importrandom23

24 q = queue.Queue(10)25

26

27 defproduce():28 i =029 while i < 10:30 num = random.randint(1, 100)31 q.put("生产者生产出数据:%d" %num)32 print("生产者生产出数据:%d" %num)33 time.sleep(0.2)34 i += 1

35 print("生产结束")36

37

38 defconsume():39 whileTrue:40 time.sleep(0.3)41 ifq.empty():42 break

43 item =q.get()44 print("消费者取出:", item)45 q.task_done()46

47 print("消费者结束")48

49

50 if __name__ == '__main__':51

52 #创建生产者

53 t1 = threading.Thread(target=produce, name="生产者")54 t1.start()55 time.sleep(0.1)56

57 #创建消费者

58 t2 = threading.Thread(target=consume, name="消费者")59 t2.start()60 q.join()61

62 print("over")63

64

65 #from threading import Thread

66 #import time

67 #import random

68 #from queue import Queue

69 #from collections import deque

70 #from datetime import datetime

71 #72 ## 创建队列,设置队列最大数限制为3个

73 #queue = Queue(3)

74 #75 #76 ## 生产者线程

77 #class Pro_Thread(Thread):

78 #def run(self):

79 ## 原材料准备,等待被生产,这里使用的是双向队列

80 #tasks = deque([1, 2, 3, 4, 5, 6, 7, 8])

81 #global queue

82 #while True:

83 #try:

84 ## 从原材料左边开始生产,如果tasks中没有元素,调用popleft()则会抛出错误

85 #task = tasks.popleft()

86 #queue.put(task)

87 #print(datetime.now(), "生产", task, "现在队列数:", queue.qsize())

88 #89 ## 休眠随机时间

90 #time.sleep(0.5)

91 ## 如果原材料被生产完,生产线程跳出循环

92 #except IndexError:

93 #print("原材料已被生产完毕")

94 #break

95 #print("生产完毕")

96 #97 #98 ## 消费者线程

99 #class Con_Thread(Thread):

100 #def run(self):

101 #global queue

102 #while True:

103 #if not queue.empty():

104 ## 通过get(),这里已经将队列减去了1

105 #task = queue.get()

106 #time.sleep(2)

107 ## 发出完成的信号,不发的话,join会永远阻塞,程序不会停止

108 #queue.task_done()

109 #print(datetime.now(), "消费", task)

110 #else:

111 #break

112 #print("消费完毕")

113 #114 #115 ## r入口方法,主线程

116 #def main():

117 #Pro_1 = Pro_Thread()

118 ## 启动线程

119 #Pro_1.start()

120 ## 这里休眠一秒钟,等到队列有值,否则队列创建时是空的,主线程直接就结束了,实验失败,造成误导

121 #time.sleep(1)

122 #for i in range(2):

123 #Con_i = Con_Thread()

124 ## 启动线程

125 #Con_i.start()

126 #global queue

127 ## 接收信号,主线程在这里等待队列被处理完毕后再做下一步

128 #queue.join()

129 ## 给个标示,表示主线程已经结束

130 #print("主线程结束")

131 #132 #133 #if __name__ == '__main__':

134 #main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3、C#面向对象:封装、继承、多态、String、集合、文件(下)

面向对象多态 一、装箱和拆箱 装箱&#xff1a;将值类型转换为引用类型。object o 1&#xff1b;值类型给引用类型赋值 拆箱&#xff1a;将引用类型转换为值类型。int n (int)o; 强制转换为值类型 满足条件&#xff1a;两种类型是否存在继承关系。 int n Convert.ToInt32(&q…

mysql gui 分区_一文彻底搞懂MySQL分区

一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存储结构和区的概念&#xff0c;它的所有数据都被逻辑地存放在表空间&#xff0c;表空间又由段&#xff0c;区&#xff0c;页组成。段段就是上图的segment区域&#xff0c;常见的段有数据段、索引段、回滚段等&#xff0c;在In…

js 获取域名_RapidDNS域名查询如何联动Goby

前言&#xff1a;http://RapidDNS.io 是一个秒级在线子域名和同IP域名的查询工具。目前拥有25亿条DNS记录&#xff0c;支持A、AAAA、CNAME、MX4种DNS记录类型。由于Goby程序对子域名收集方面不是很完善&#xff0c;这里特编写此插件作为其拓展。可以方便快速获取域名和ip地址信…

iOS 9应用开发教程之iOS 9新特性

iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统。该操作系统于2015年6月8号&#xff08;美国时间&#xff09;被发布。本章将主要讲解iOS 9的新特性、以及使用Xcode 7.0如何编写一个简单的iOS 9的应用程序等内容…

python后端框架flask_Vue+Flask轻量级前端、后端框架,如何完美同步开发

导言我们的Vue2.0应用&#xff1a;简读-微信公众号RSS&#xff0c;即将进入后端开发。VueFlask作为轻量级前端、后端框架&#xff0c;非常适合组合起来快速开发。一个是js&#xff0c;一个是Python。Bonus:可以完美实现跨域调试&#xff0c;不需要JSONP&#xff0c;也不需要服务…

mysql查询错误_一个奇怪的MySQL查询错误

t_user表的phone_number字段是varchar(255)类型的&#xff0c;表示手机号&#xff0c;在查询某个手机号时&#xff0c;sql语句如下&#xff1a;SELECT phone_number FROM t_user WHERE phone_number 13400000000查询结果&#xff1a;phone_number---------------------------…

hdu 3308 线段树

输入一串数字&#xff0c;有两个操作&#xff1a;Q a b 查询a到b区间内严格递增子串的最大长度 &#xff1b; U a b 把第a位数字替换成b 。注意输入的编号是从0开始 解法&#xff1a;线段树维护区间的严格递增子串的最大长度即可。注意细节。 #include <iostream> #inclu…

kafka创建topic命令_0748-5.14.4-Kafka的扩容和缩容

​文档编写目的在Kafka集群资源使用已超出系统配置的资源时&#xff0c;或者有大量资源闲置造成资源浪费的时候&#xff0c;需要分别通过扩容Kafka和缩容Kafka来进行调整。本篇文章Fayson主要介绍如何进行Kafka的扩容和缩容&#xff0c;以及变更后的Kafka集群如何进行负载均衡的…

java 对话框 显示图片_Java对话框上显示图片

手掌心其实有很多种方法可以解决图片显示大小的问题:使用photoshop修改. 优点是可以节省系统资源, 显示图片的时候,不用做处理,缺点是需要了解ps的基本操作使用JDialog 自定义对话框. 优点 可以实现复杂的效果, 缺点,代码量比较多使用ImageIcon, Image 类 实现图片的缩放,. 优点…

class-dump获取iOS私有api

转自&#xff1a;http://blog.csdn.net/sunyuanyang625/article/details/41440167 获取各类iOS私有api 安装工具class&#xff0d;dump 资源地址http://download.csdn.net/detail/map625/8191343 运行class&#xff0d;dump并编译src项目 编译之后在produce中找到编译好的class…

python能开发什么产品_三周学 Python ?不,三周做个产品

我的同事在看到毫无开发经验的我用三周时间&#xff0c;不但从零基础用上了 Python&#xff0c;还做出了一个客户关系管理系统&#xff0c;强烈邀请我分享经验。惶恐&#xff0c;因为我并没有出色的智商&#xff0c;也没有觉得三周学 Python 是一个体现自己牛叉的事情(不少人可…

爬楼梯 java_Leetcode 70.爬楼梯(Java)

题目&#xff1a;假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f;注意&#xff1a;给定 n 是一个正整数。示例 1&#xff1a;输入&#xff1a; 2输出&#xff1a; 2解释&#xff1a; 有两种方法可以爬…

WebView之2

首先需要添加权限&#xff1a; <uses-permission android:name"android.permission.INTERNET"/>   MainActivity: package com.wyl.webview;import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.vie…

火星云分发全网视频_好用的短视频一键分发软件,让工作效率提高10倍

随着近几年新媒体行业的高速发展&#xff0c;新媒体行业的红利也越来越来&#xff0c;也有越来越多的人想要享受到这波红利&#xff0c;于是不管是个人是企业都纷纷开始进入这个市场。不过也随之诞生了一系列麻烦繁琐的问题&#xff0c;如怎么持续创作内容&#xff0c;怎么花费…

java 采样_Java编程实现beta分布的采样或抽样实例代码

本文研究的主要是Java编程实现beta分布的采样或抽样&#xff0c;具体如下。本文将使用math3提供的工具包&#xff0c;对beta分布进行采样。如下程序是对alpha81&#xff0c;beta219的beta分布函数&#xff0c;进行抽样&#xff0c;共采样10000次。package function;/*** author…

树莓派 蓝牙音响_你应该拥有一个树莓派

为什么你应该拥有一个树莓派树莓派并不是极客的玩具树莓派可以用来做什么?它能实现的实在是太多了,最常见的比如自动化脚本 各种机器人bot: QQ/wechat/微博/facebook/telegram,IM结合爬虫 telegram的bot如今被黑产们结合比特币,做成了交易系统 使用宝塔linux面板,一键安装word…

训练集的识别率一直波动_机器学习验证集为什么不再有新意?

机器学习中&#xff0c;一般将样本数据分成独立的三部分&#xff1a;训练集、验证集和测试集。其中验证集在机器学习中所起到的作用是&#xff1a;开发模型总需要调节模型的参数&#xff0c;而整个调节过程需要在验证集数据上运行训练的模型&#xff0c;从而给出其表现的反馈信…

java写一个web聊天工具_javaweb写的在线聊天应用

写这个玩意儿就是想练练手&#xff0c; 用户需要登陆才能在线聊天&#xff0c;不要依赖数据库&#xff0c; 不需要数据库的操作&#xff0c; 所有的数据都是保存在内存中&#xff0c; 如果服务器一旦重启&#xff0c;数据就没有了&#xff1b;登录界面&#xff1a;聊天界面&…

python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数

Pandas之drop_duplicates&#xff1a;去除重复项方法DataFrame.drop_duplicates(subsetNone, keepfirst, inplaceFalse)参数这个drop_duplicate方法是对DataFrame格式的数据&#xff0c;去除特定列下面的重复行。返回DataFrame格式的数据。subset : column label or sequence o…

O-C相关-08-动态类型与静态类型

08-动态类型与静态类型 1, 什么是动态类型和静态类型 1) 动态语言 又叫动态编程语言&#xff0c;是指程序在运行时可以改变其结构&#xff1a;新的函数可以被引进&#xff0c;已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除…