【发布时间】:2019-05-12 13:59:35
【问题描述】:
我正在使用 python3.6 中的个人项目,我遇到了以下问题,导致 my_queue.join() 调用无限期阻塞。请注意,这不是我的实际代码,而是演示问题的最小示例。
import threading
import queue
def foo(stop_event, my_queue):
while not stop_event.is_set():
try:
item = my_queue.get(timeout=0.1)
print(item) #Actual logic goes here
except queue.Empty:
pass
print('DONE')
stop_event = threading.Event()
my_queue = queue.Queue()
thread = threading.Thread(target=foo, args=(stop_event, my_queue))
thread.start()
my_queue.put(1)
my_queue.put(2)
my_queue.put(3)
print('ALL PUT')
my_queue.join()
print('ALL PROCESSED')
stop_event.set()
print('ALL COMPLETE')
我得到以下输出(实际上一直是一致的,但我知道输出顺序可能因线程而异):
ALL PUT
1
2
3
无论我等待多长时间,我都不会看到ALL PROCESSED 输出到控制台,那么为什么my_queue.join() 在处理完所有项目后会无限期地阻塞?
【问题讨论】:
标签: python-3.x queue python-multithreading