gpt4 book ai didi

python - 当在队列中启动多个线程时,哪个线程从堆栈中取出第一个

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:06 25 4
gpt4 key购买 nike

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

根据我的解释,这段代码会启动任何范围的线程,无论多少项目都位于中队列。

因此,如果您启动 20 个线程,并将 30 个项目放入队列中,则似乎将有 20 个工作线程都在调用

while True:
item = q.get()
do_work(item)

那么,第一次将项目放入队列时,20 个线程中的哪一个实际获取刚刚放入队列的项目?

最佳答案

一般来说,不会有保证的顺序,只有保证的互斥。假设您使用的是 queue.Queue (Python 3) 之类的东西,它使用同步原语来确保一次只有一个线程可以 get() 一项。但是线程获得机会的顺序将受到操作系统调度程序的变化无常的影响 - 负载、优先级等。

关于python - 当在队列中启动多个线程时,哪个线程从堆栈中取出第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32149513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com