我正在通过一个简单的多线程教程。其中有10个线程创建相应的处理20名工人。我明白了一个线程如何处理一个worker,并且有10个线程并行运行,服务于20个驻留在优先级队列中的worker。 但我的问题是,如果一个线程已完成为指派的工作人员提供服务,并且有9个线程仍在为其工作人员提供服务,会发生什么情况。python多线程使用python
我想创建一个脚本,如果一个线程的工作结束,那么它应该获取驻留在队列中的其他工作人员。
这里是我的代码: -
import threading
from queue import PriorityQueue
import time
print_lock = threading.Lock()
q = PriorityQueue()
def threader():
i = 0
while True:
worker = q.get()
exampleJob(worker)
q.task_done()
for x in range(10):
t = threading.Thread(target = threader)
t.deamon = True
t.start()
start_time = time.time()
for worker in range(1,20):
q.put(worker)
def exampleJob(worker):
if(worker ==1):
time.sleep(0.5)
else:
time.sleep(5)
with print_lock:
print(threading.current_thread().name,worker)
q.join()
print('Entire job took:', time.time()-start_time)
在上面的代码中,我创建的0.5睡眠的工人1,但其余有5秒的睡眠,如果我执行这个脚本,线程1处理工作者1和等待直到所有其他9个线程完成其工作。 我想如果线程1完成了工作,它应该采用工号11来处理。上面的代码
输出为: -
Thread-1 1
Thread-3 3
Thread-5 5
Thread-4 4
Thread-2 2
Thread-6 6
Thread-10 10
Thread-7 7
Thread-9 9
Thread-8 8
Thread-1 11
Thread-3 12
Thread-5 13
Thread-4 14
Thread-2 15
Thread-6 16
Thread-10 17
Thread-7 18
Thread-9 19
Entire job took: 10.137013912200928
嗨,感谢您的详细解释。 正如你所说,为了达到同步我必须在锁上工作,我的问题仍然是一样的,我如何同步这些线程以便Th1选择工人1等等。在Th1完成工作后不久,它应该选择下一名优先级较高的工作人员。 –