金普新区城乡建设局网站,公司简介模板表格,开发公司资质需要什么证书,天津建设工程信息网怎么报名一. 前言
task_done()是Python中queue模块提供的方法#xff0c;用于通知队列管理器#xff0c;已经处理完了队列中的一个项目。
queue.task_done()是Queue对象的一个方法#xff0c;它用于通知Queue对象#xff0c;队列中的某一项已经被处理完毕。通常在使用Queue对象时…一. 前言
task_done()是Python中queue模块提供的方法用于通知队列管理器已经处理完了队列中的一个项目。
queue.task_done()是Queue对象的一个方法它用于通知Queue对象队列中的某一项已经被处理完毕。通常在使用Queue对象时当生产者把数据放入队列中后消费者需要从队列中取出数据并进行处理。当消费者处理完一项数据后就可以使用queue.task_done()方法通知队列这样Queue对象就可以知道队列中那一项已经被处理完毕了。
使用队列时我们通常使用put()方法将项目添加到队列中然后使用get()方法从队列中获取项目进行处理。在处理完一个项目后我们可以使用task_done()方法通知队列管理器这个项目已经被处理完了。
如果我们使用了join()方法等待所有的项目都被处理完那么这个方法会在所有的项目都被处理完后返回。
二. 基本使用
示例代码
import queue
import threadingdef worker(q):while True:item q.get()print(Processing, item)q.task_done()if __name__ __main__:q queue.Queue()for i in range(5):q.put(i)for i in range(3):t threading.Thread(targetworker, args(q,))t.daemon Truet.start()q.join()print(All items processed.)
在上面的示例代码中我们首先创建了一个队列q并向其添加了5个项目。然后我们创建了3个线程每个线程使用worker()函数从队列中获取一个项目并使用task_done()方法将其处理掉。由于我们使用了join()方法等待所有的项目都被处理完因此在所有的项目都被处理完后最后输出All items processed.。
运行结果
在这个示例中task_done()方法每次从队列中取出一个项目就会被调用一次因此队列管理器最终会知道所有的项目都已经被处理完毕。
三. 任务实时完成通知使用
边读边取的示例代码
这里定义了一个生产者和一个消费者并使用Queue对象用于数据传输。生产者往队列中放入了10个数据项每个数据项之间暂停1秒而消费者从队列中取出数据项并进行处理每次取出一个数据项后暂停2秒。在消费者处理完每个数据项之后使用q.task_done()方法通知队列以便队列可以知道已经有一项数据被处理完毕了。
import queue
import threading
import timedef producer(q):for i in range(10):q.put(i)print([Producer] Put item {} into queue.format(i))time.sleep(1)def consumer(q):while True:item q.get()print([Consumer] Get item {} from queue.format(item))q.task_done()print(ftask {threading.current_thread().name} done! item--:{item})time.sleep(2)if __name__ __main__:q queue.Queue()t1 threading.Thread(targetproducer, args(q,))t2 threading.Thread(targetconsumer, args(q,))t1.start()t2.start()t1.join()t2.join()运行结果 这里的代码使用了线程来模拟生产者和消费者并且生产者和消费者都是边放数据边取数据因此可以看到数据的生产和消费是交替进行的。
具体的使用需要更具不同的业务场景来选择使用的方式
以上就是Python - 队列【queue】task_done()和join()基本使用的介绍感谢阅读希望对你有所帮助