首页 > 编程语言 >python queue join task_done的概念及实例解析

python queue join task_done的概念及实例解析

时间:2023-10-08 10:58:44浏览次数:39  
标签:icnt task join producer python data aaa consumer

一 概念 Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执行别的操作。   二 实例 源码一

import threading
import queue
import time

# 创建队列,用于存储数据
q = queue.Queue()
icnt = 0
def producer():
    while True:
        global icnt
        icnt = icnt + 1
        #print("producer icnt is:%d "%icnt)
        data = "hello world"
        print("producer is:",icnt)
        q.put(data) # 生产者线程函数,向队列存入数据
        #q.join()
        data = "hello queue aaa "
        print("producer is:aaa ",icnt)
        q.put(data) # 生产者线程函数,向队列存入数据
        q.join()
        time.sleep(1)

def consumer():
    while True:
        data = q.get() # 消费者线程,从队列取出数据
        q.task_done()
        print("consumer is:",data)


# 创建并启动生产者、消费者线程
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
t1.start()
t2.start()

# 等待线程结束

t1.join()
t2.join()

运行结果:

producer is: 1
producer is:aaa  1
consumer is: hello world
consumer is: hello queue aaa 
producer is: 2
producer is:aaa  2
consumer is: hello world
consumer is: hello queue aaa 

源码二

import threading
import queue
import time

# 创建队列,用于存储数据
q = queue.Queue()
icnt = 0
def producer():
    while True:
        global icnt
        icnt = icnt + 1
        #print("producer icnt is:%d "%icnt)
        data = "hello world"
        print("producer is:",icnt)
        q.put(data) # 生产者线程函数,向队列存入数据
        q.join()
        data = "hello queue aaa "
        print("producer is:aaa ",icnt)
        q.put(data) # 生产者线程函数,向队列存入数据
        q.join()
        time.sleep(1)

def consumer():
    while True:
        data = q.get() # 消费者线程,从队列取出数据
        q.task_done()
        print("consumer is:",data)


# 创建并启动生产者、消费者线程
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
t1.start()
t2.start()

# 等待线程结束

t1.join()
t2.join()

运行结果:

producer is: 1
consumer is: hello world
producer is:aaa  1
consumer is: hello queue aaa 
producer is: 2
consumer is: hello world
producer is:aaa  2
consumer is: hello queue aaa 

 

三 总结 看完例子,再回头看刚开始的那段话,会有豁然开朗的感觉。 Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号 Queue.join() 实际上意味着等到队列为空,再执行别的操作。

标签:icnt,task,join,producer,python,data,aaa,consumer
From: https://www.cnblogs.com/dylancao/p/17748341.html

相关文章

  • python gui开发
    Tkinter(PySimpleGUI)Python标准GUI库,对TCL/TK工具包的一种Python接口封装。Tkinter教程(非常详细)(biancheng.net)打包后比较小,需手写布局,复杂界面功能需自行开发wxPython跨平台GUI库wxWidgets的Python封装。图形用户界面生成器wxFormBuilder(停止维护)Overviewofwx......
  • python内建函数和标准库
    python内建函数Python中的内建函数是指在Python解释器中可以直接调用的函数,不需要导入任何模块或库。这些函数在Python的官方文档中有详细的说明,可直接在Python程序中使用。常用内建函数:abs()返回数字的绝对值。all() 接受一个可迭代对象(如列表)作为参数,如果可迭代对象的所有元......
  • 盘点一个Python自动化办公Excel数据填充实战案例(上篇)
    大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Python自动化办公的问题,一起来看看吧。有个表格,里面每行信息,如下图所示:现在需要将数据贴到另一个文件指定单元格中,另一个文件是这样子的。下图是他的原始数据和他想得到的目标数据,一页有三个,如下所......
  • Python基础环境安装
    环境安装记录,便以后直接一套执行一、准备1.Python下载地址:https://www.python.org/downloads/windows/2.卸载①控制面板寻找Python直接卸载;②查看环境变量path中python的变量,找到对应文件夹,将文件夹删除,后在删除环境变量中有关python的变量;③Win+R运行"regedit"打开注......
  • 深挖 Python 元组 pt.1
    哈喽大家好,我是咸鱼好久不见甚是想念,2023年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢?我们知道元组(tuple)是Python的内置数据类型,tuple是一个不可变的值序列tuple的元素可以是任何类型,一般用在存储异构数据(例如数据库记录)的场景......
  • 配置Python国内pip源
    使用按键win+e打开文件管理器,在上方路径栏输入:%APPDATA%查看此目录下是否有pip目录,如果没有则需要创建,并在pip目录下以文本方式添加pip.ini文件。写入内容为[global]index-url=https://pypi.tuna.tsinghua.edu.cn/simple也可以更改index-url的内容为其他pip源。保存退......
  • 【进阶16】Python多线程实战案例
    一、Python实现多线程的几种方式_thread:模块提供了基本的线程和互斥锁支持;更底层的的线程管理实现模块threading:threading模块则通过封装_thread,提供了更加全面的线程使用方法。_thread案例:#*coding:utf-8*#用_thread启动多个线程完成任务import_threadimportthread......
  • python Excel添加Excel附件
    #"""#插入附件importwin32com.clientif__name__=="__main__":filename=r"23年09月.xlsx"xlApp=win32com.client.Dispatch('Excel.Application')xlApp.Visible=0#0不可见,1可见workbook=xlApp.Wo......
  • 用Python画函数的曲线
    #coding:utf8importmatplotlib.pyplotaspltimportnumpyasnp#先获取一个图表fig=plt.figure()stringabc="test"#设置x,y坐标轴的刻度显示范围plt.xlim(-7,7)plt.ylim(-3,7)#抛物线X1=np.linspace(-5,5,50)#-5~5之间生成50个点Y1=0.25*X1**2plt......
  • Python 元组完全指南2
    更新元组更改元组的值元组是不可更改的,但有一种变通方法。您可以将元组转换为列表,更改列表,然后将列表转换回元组。示例:x=("apple","banana","cherry")y=list(x)y[1]="kiwi"x=tuple(y)print(x)添加项由于元组是不可变的,没有内置的append()方法,但可以使用其他......