首页>资讯>正文
关于Python中几种队列Queue用法区别
2023-05-02 06:01:17    来源:脚本之家
目录
python中使用到的队列模块大致有三个:1、from queue import Queue2、from multiprocessing import Queue3、from multiprocessing import Manager

python中使用到的队列模块大致有三个:

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用法区别

这篇文章主要介绍了关于Python中几种队列Queue用法区别,queue队列中的put()或者get()方法中都提供了timeout2023-05-02

明月江湖外挂怎么用_明月江湖

1、小说秦时明月25的大结局是一个雷厉风行的大结局。赵爷道:“文大人虽好,总不如开封府包太师那里好。”22023-05-02

【世界速看料】萨巴蒂尼:国米或者米兰将赢得欧冠冠军,这一点我毫不怀疑

萨巴蒂尼:国米或者米兰将赢得欧冠冠军,这一点我毫不怀疑,欧冠,意甲,国米,国际米兰,网球赛事,意大利足球,2023-05-02

世界微头条丨小米汽车可期!网友在厦门4S店偶遇卢伟冰

快科技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

中国国航:定增募资不超150亿元申请获证监会审核通过

中国国航11月14日公告,2022年度非公开发行A股股票申请获得中国证监会发行审核委员会审核通过。公司此前公2023-05-01

焦点快看:涡流探伤原理是什么_涡流探伤原理

1、钢管的涡流探伤原理:  通常钢管涡流探伤采用通过式磁饱和器。2、它是由通有直流电的线圈来产生稳恒强2023-05-01

【新要闻】民国三年银元价格(2023年05月01日)

金投白银网提供民国三年银元价格(2023年05月01日),民国三年银元多少钱最新消息(2023年05月01日)。2023-05-01

iPhone 15接口升级雷电3!

根据此前爆料的消息,iPhone15将升级至USB-C接口,不过苹果进一步加大了标准版和Pro版本之间的差异,iPhone2023-05-01

天天快看点丨痞幼疑陷1亿骗局,好友爆其肮脏恋爱史,被曝曾做韩国外围

痞幼疑陷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

word文档首页不要页码

1、Word页码随意定我们在使用Word时,经常要根据实际情况来编排页码,那么只要掌握了下面列出的几种常见页2023-05-01

抑郁症患者拳打护士反被安慰详细内容

大家好,小太来为大家解答以上问题。抑郁症患者拳打护士反被安慰很多人还不知道,现在让我们一起来看看吧!2023-05-01