Python中最佳方法来清空multiprocessing.queue(-1)

2024-06-23 20:04:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我要提取队列中当前的所有项目。有另一个线程不断地把项目放在另一端,每个周期我都想得到当前队列中的所有项目。在

是否有理由选择:

res = []
while q.qsize > 0 :
    res.append(q.get())

或者

^{pr2}$

现在文档明确指出,qsize()>;0不会阻止队列在get上阻塞,但是只有在多个线程可以从输出中获取数据的情况下,这是真的吗?在

Queue.qsize() Return the approximate size of the queue. Note, qsize() > 0 doesn’t guarantee that a subsequent get() will not block, nor will qsize() < maxsize guarantee that put() will not block.

这是否意味着第二种形式应该始终是首选?EAFP之类的?另外,调用q.qsize()是否有成本?它是否阻塞队列的另一端以便计数?在

我想我已经说服自己使用了第二种形式,但对我来说它似乎不那么干净。在


Tags: the项目getthat队列notresblock
1条回答
网友
1楼 · 发布于 2024-06-23 20:04:53

是的,您应该始终使用第二种变体:api文档通常比未记录的实现细节更可靠。即使当前的multiprocessing实现工作正常,在您的特殊情况下,get()不会阻止if{},也不能保证它在将来的Python版本中会保持这种方式,因为文档已经明确指出它不是

也就是说,对于Python的当前版本,只要只有一个消费过程,第一个版本应该可以可靠地工作。调用qsizeintenally invokes ^{} on Linux and ^{} on Windows;两者都不锁定任何内容。(对于Linux调用,这在手册页中有记录,对于Windows调用,这是一个很强的猜测。)

请注意,如果您有多个使用者,并且想要确保其中一个使用者读取整个伫列,您必须使用附加的锁来封闭您的循环!在

相关问题 更多 >

    热门问题