python队列,SimpleQueue,任务完成
使用python队列,SimpleQueue,任务完成,python,queue,python-multithreading,Python,Queue,Python Multithreading,使用queue.queue()时是否必须调用task\u done() 如果我不需要任务计数,我是否应该使用queue.SimpleQueue(为了更好的性能)? 我不确定SimpleQueue是否是线程安全的?因为我看到put()实现没有获得锁 当我在Queue()实现中播种时,如果我不调用task_done(),则会有一个递增的计数器,并且由于我的程序正在长时间运行,不调用task_done()会导致内存泄漏吗?因为数数太多了 除非使用Queue.join()函数,否则不必调用task
queue.queue()
时是否必须调用task\u done()
queue.SimpleQueue
(为了更好的性能)?
我不确定SimpleQueue
是否是线程安全的?因为我看到put()
实现没有获得锁
Queue()
实现中播种时,如果我不调用task_done(),则会有一个递增的计数器,并且由于我的程序正在长时间运行,不调用task_done()会导致内存泄漏吗?因为数数太多了
Queue.join()
函数,否则不必调用task\u done()
Queue.join()
阻塞,直到获取并处理队列中的所有项目
每当将项目添加到队列中时,未完成任务的计数就会增加。每当使用者线程调用task\u done()
以指示已检索到该项,并且该项上的所有工作都已完成时,计数就会下降。当未完成任务的计数降至零时,join()
取消阻止
task\u done
,join
),您可以使用queue.SimpleQueue
而不是queue.queue
作为更轻量级的版本SimpleQueue
是线程安全的,而且更安全,正如queue.SimpleQueue.put
是安全的。例如,您可以通过\uu del\uu
方法、weakref
回调或信号模块信号处理程序安全地调用它
注:至少这适用于其С实施
queue.queue
使用int
作为put
的计数器。我的拙见是,这个计数器可能会占用太多的内存,这更多的是理论上的,而不是实践上的另一件事
SimpleQueue
缺少的是大小限制。如果您需要背压(并且几乎每个队列都需要背压),SimpleQueue
将是一个等待发生的内存泄漏。