目录
python中使用到的队列模块大致有三个:1、from queue import Queue2、from multiprocessing import Queue3、from multiprocessing import Managerpython中使用到的队列模块大致有三个:
1、from queue import Queue
此模块适用于线程间通信,但不能用于进程间通信。
示例代码1: 【注意:此时代码存在错误!!!】
import time
import threading
from queue import Queue
def task_func():
global queue
while queue.qsize() > 0:
x = queue.get()
print(f"num: {x}")
time.sleep(0.1)
def producer_data():
global queue
for i in range(100):
queue.put(i)
time.sleep(0.1)
if __name__ == "__main__":
queue = Queue()
producer_thread = threading.Thread(target=producer_data)
producer_thread.start()
thread_list = []
for i in range(5):
thread = threading.Thread(target=task_func)
thread.start()
thread_list.append(thread)
for thread in thread_list:
thread.join()
print("主程序执行结束!")注意:上述写法:
(资料图片仅供参考)
while queue.qsize() > 0:
x = queue.get()当生产者速度没有消费者速度快时,上述消费者代码会提前结束,导致生产者的速度不能消费。
while True:
x = queue.get()这种写法也存在问题,此时消费者队列会一直监听生产者队列是否有数据,导致线程一直处于阻塞状态,程序会一直阻塞不会停止,严重浪费系统资源。如果使用apscheduler等定时任务的库的话,会导致定时任务无法启动。
其实queue队列中的put()或者get()方法中都提供了timeout参数,利用这个参数可以有效解决上述消除不能消费和线程一直阻塞问题。
示例代码2:
import time
import threading
from queue import Queue
def task_func():
global queue
while True:
x = queue.get(timeout=10)
print(f"num: {x}")
def producer_data():
global queue
for i in range(100):
queue.put(i)
time.sleep(0.1)
if __name__ == "__main__":
queue = Queue()
producer_thread = threading.Thread(target=producer_data)
producer_thread.start()
thread_list = []
for i in range(5):
thread = threading.Thread(target=task_func)
thread.start()
thread_list.append(thread)
for thread in thread_list:
thread.join()
print("主程序执行结束!")运行结果:
根据不同的情境,可以根据实际情况设置timeout的值。如果使用定时任务,使用timeout是可以的,不会使程序抛异常停止的。
2、from multiprocessing import Queue
此模块用于对进程,但是不能用于进程池
示例代码:
import time
from multiprocessing import Process, Queue
import queue
def producer(queue):
queue.put("a")
time.sleep(2)
def consumer(queue):
time.sleep(2)
data = queue.get()
print(data)
if __name__ == "__main__":
# queue = queue.Queue()
queue = Queue()
my_producer = Process(target=producer, args=(queue, ))
my_consumer = Process(target=consumer, args=(queue, ))
my_producer.start()
my_consumer.start()
my_producer.join()
my_consumer.join()
# 使用queue模块的Queue()会报错
# 使用multiprocessing中的Queue(),正确输出a
运行结果:
3、from multiprocessing import Manager
示例代码:
import time
from multiprocessing import Process, Queue, Pool, Manager
def producer(queue):
queue.put("a")
time.sleep(2)
def consumer(queue):
time.sleep(2)
data = queue.get()
print(data)
if __name__ == "__main__":
# queue = Queue()
queue = Manager().Queue()
pool = Pool()
# pool中的进程间通信需要使用Manager
pool.apply_async(producer, args=(queue, ))
pool.apply_async(consumer, args=(queue, ))
pool.close()
pool.join()运行结果:
到此这篇关于关于Python中几种队列Queue用法区别的文章就介绍到这了,更多相关Python中的队列Queue内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
关键词:
这篇文章主要介绍了关于Python中几种队列Queue用法区别,queue队列中的put()或者get()方法中都提供了timeout2023-05-02
1、小说秦时明月25的大结局是一个雷厉风行的大结局。赵爷道:“文大人虽好,总不如开封府包太师那里好。”22023-05-02
萨巴蒂尼:国米或者米兰将赢得欧冠冠军,这一点我毫不怀疑,欧冠,意甲,国米,国际米兰,网球赛事,意大利足球,2023-05-02
快科技5月1日消息,小米集团卢伟冰从上周开始在线下门店走访调研。一位网友在厦门4S店内偶遇了卢伟冰,称“2023-05-01
1、材料:燕窝10g,凉白开(纯净水)100ml左右。2、用凉白开泡发干燕窝,大约10g的样子,泡到透明即可。3、2023-05-01
抄写作文网小编为大家提供哪些古诗写了哪些节日有哪些古诗描写了中国的传统节日?节日的来供大家参考,欢迎2023-05-01
为切实做好五一假期和夏季消防安全工作,提升全民消防安全意识,4月25日,台州市消防救援支队联合交通广播F2023-05-01
1、粉水晶可以增强气场、改善另一半感情、使周围的人喜爱你、放松情绪,具体介绍如下:可以增强自身气场里的2023-05-01
哈尔滨通报一小区房屋私拆承重墙今天的热度非常高,现在也是在热搜榜上了,那么具体的哈尔滨通报一小区房屋2023-05-01
1、1 英超86分2 西甲81分3 意甲65分4 法甲63分5 德甲57分这是2006年最新的排名格兰足球超级联赛(FA2023-05-01
参考消息网5月1日报道据俄罗斯卫星社网站4月29日报道,叙利亚总统巴沙尔·阿萨德4月29日表示,叙利亚支持中2023-05-01
1、在选择英雄之后按确定,然后会出现英雄的皮肤,你往左边拖。2、可以选择使用其他皮肤,然后选到你买的那2023-05-01
中国国航11月14日公告,2022年度非公开发行A股股票申请获得中国证监会发行审核委员会审核通过。公司此前公2023-05-01
1、钢管的涡流探伤原理: 通常钢管涡流探伤采用通过式磁饱和器。2、它是由通有直流电的线圈来产生稳恒强2023-05-01
金投白银网提供民国三年银元价格(2023年05月01日),民国三年银元多少钱最新消息(2023年05月01日)。2023-05-01
根据此前爆料的消息,iPhone15将升级至USB-C接口,不过苹果进一步加大了标准版和Pro版本之间的差异,iPhone2023-05-01
痞幼疑陷1亿骗局,好友爆其肮脏恋爱史,被曝曾做韩国外围,痞幼,韩国,网红,骗局,林弯弯,恋爱史,私密照片2023-05-01
大数据统计结果显示 29日各旅游城市游客规模暴涨 其中,广州市、成都市、北京市 深圳市、杭州市、苏州市、2023-05-01
直播吧5月1日讯今日NBA季后赛抢七大战,勇士以120-100击败国王,与湖人会师西部半决赛。赛后,克莱接受了记2023-05-01
1、你如果说的是卖力气活,好的也可以4000左右。2、不过年轻人恐怕都吃不消。3、还是去学一门技术,以后就2023-05-01
人社局围绕“高质量发展走在前”目标要求,大力开展校园招聘活动,为企业发展提供人才支撑,助力营造优质营2023-05-01
1、就是充分了解自己和敌人的优势与劣势。2、从而做到战无不胜。本文到此分享完毕,希望对你有所帮助。2023-05-01
1、我有,在我的百度网盘里,但是分享不出来,疑犯追踪百度限制了,分享出来马上就失效了,不过我是从一个2023-05-01
1、Word页码随意定我们在使用Word时,经常要根据实际情况来编排页码,那么只要掌握了下面列出的几种常见页2023-05-01
大家好,小太来为大家解答以上问题。抑郁症患者拳打护士反被安慰很多人还不知道,现在让我们一起来看看吧!2023-05-01
