我正在使用Python threading
模块并行执行相同的函数两次,但具有不同的参数。我想在其中一个线程完成后立即显示结果,然后在第二个线程完成时显示结果。我试图通过将函数的结果放在队列中来实现这一点然后在主线程中等待这些值。我使用的代码如下:
import threading
import queue
import time
q = queue.Queue()
thread1 = threading.Thread(target=some_func, args=(q,0))
thread2 = threading.Thread(target=some_func, args=(q,1))
thread1.start()
thread2.start()
first_result = q.get()
print(first_result)
second_result = q.get()
print(second_result)
def some_func(queue: queue.Queue, val: int):
time.sleep(val*2 + 5)
queue.put(val)
现在它正在等待两个线程完成执行并同时输出结果。有人能帮帮我吗?
谢谢!
Queue.get()
阻塞,直到队列中有可用的结果。这意味着主线程可能无限期地等待,直到两个线程都完成执行并将结果添加到队列中。但是,您可以使用timeout
来确认它允许主线程定期检查队列中的新结果,而不会无限期阻塞。
试试这个:
thread1.start()
thread2.start()
# Loop until both threads have finished
while thread1.is_alive() or thread2.is_alive():
# Check for new results in the queue every 0.1 seconds
try:
result = q.get(timeout=0.1)
print(result)
except queue.Empty:
pass
print(f"[{time.asctime()}] Result: {result}")
,我用这个来确认它们不会同时打印。
输出:
[Mon Dec 19 22:31:07 2022] Result: 0 [Mon Dec 19 22:31:09 2022] Result: 1