我要提取队列中当前的所有项目。有另一个线程不断地把项目放在另一端,每个周期我都想得到当前队列中的所有项目。在
是否有理由选择:
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()是否有成本?它是否阻塞队列的另一端以便计数?在
我想我已经说服自己使用了第二种形式,但对我来说它似乎不那么干净。在
是的,您应该始终使用第二种变体:api文档通常比未记录的实现细节更可靠。即使当前的},也不能保证它在将来的Python版本中会保持这种方式,因为文档已经明确指出它不是
multiprocessing
实现工作正常,在您的特殊情况下,get()
不会阻止if{也就是说,对于Python的当前版本,只要只有一个消费过程,第一个版本应该可以可靠地工作。调用} on Linux and ^{} on Windows ;两者都不锁定任何内容。(对于Linux调用,这在手册页中有记录,对于Windows调用,这是一个很强的猜测。)
qsize
intenally invokes ^{请注意,如果您有多个使用者,并且想要确保其中一个使用者读取整个伫列,您必须使用附加的锁来封闭您的循环!在
相关问题 更多 >
编程相关推荐