python示例给出了如何等待排队任务完成的示例,但我不确定如何确定检索顺序。这是代码:
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
正如我所解释的那样,这个代码在range
个线程开始的任何地方开始,但是在队列的items
中放置了许多source
。
因此,如果您启动20个线程,并在队列中放入30个项目,则看起来您将有20个工作线程全部调用
while True:
item = q.get()
do_work(item)
因此,第一次将一个项目放入队列时,20个线程中的哪一个实际上将该项目放入队列中?
答案 0 :(得分:1)
一般来说,不会有保证订单,只保证相互排斥。假设您正在使用queue.Queue
(Python 3)之类的东西,它使用同步原语来确保一次只有一个线程可以get()
一个项目。但是线程获得机会的顺序将受到OS调度程序变幻莫测的影响 - 负载,优先级等。