我希望能够获取当前队列中的所有项目。另一个线程不断将项目放在队列的另一端,而我想每隔一段时间获取当前队列中的所有项目。
有什么理由更喜欢以下方式吗:
现在文档明确指出,qsize() > 0不能防止队列在获取时阻塞,但这只适用于多个线程可以从输出中获取的情况下。
队列.Queue.qsize() 返回大约队列的大小。请注意,qsize() > 0 不能保证随后的get()不会阻塞,而qsize() < maxsize也不能保证put()不会阻塞。
这是否意味着应始终首选第二种形式?EAFP等等? 另外,调用q.qsize() 是否有成本?它是否会阻塞队列的另一端以进行计数?
我猜我已经说服自己使用第二种形式,但它对我来说似乎不太干净。
有什么理由更喜欢以下方式吗:
res = []
while q.qsize > 0 :
res.append(q.get())
或者
res = []
while True :
try :
res.append(q.get(block=False))
except Queue.Empty :
break
现在文档明确指出,qsize() > 0不能防止队列在获取时阻塞,但这只适用于多个线程可以从输出中获取的情况下。
队列.Queue.qsize() 返回大约队列的大小。请注意,qsize() > 0 不能保证随后的get()不会阻塞,而qsize() < maxsize也不能保证put()不会阻塞。
这是否意味着应始终首选第二种形式?EAFP等等? 另外,调用q.qsize() 是否有成本?它是否会阻塞队列的另一端以进行计数?
我猜我已经说服自己使用第二种形式,但它对我来说似乎不太干净。