如何在Python中将工作分配给一组工作线程?

如何在Python中将工作分配给一组工作线程?

要在一堆工作线程之间分配工作,请使用并发.futures 模块,尤其是 ThreadPoolExecutor 类。

有了这个替代方案,如果您想精细控制调度算法,您可以手动编写自己的逻辑。使用队列模块创建包含作业列表的队列。 Queue 类维护一个对象列表,并具有将项目添加到队列的 .put(obj) 方法和返回项目的 .get() 方法。该类将负责必要的锁定,以确保每个作业只分发一次。

示例

以下是一个示例 -

import threading, queue, time 1. The worker thread gets jobs off the queue. When the queue is empty, it 1. assumes there will be no more work and exits. def worker(): print('Running worker') time.sleep(0.1) while True: try: arg = q.get(block=False) except queue.Empty: print('Worker', threading.current_thread(), end=' ') print('queue empty') break else: print('Worker', threading.current_thread(), end=' ') print('running with argument', arg) time.sleep(0.5) 1. Create a queue q = queue.Queue() 1. Start a pool of 5 workers for i in range(5): t = threading.Thread(target=worker, name='worker %i' % (i+1)) t.start() 1. Begin adding work to the queue for i in range(50): q.put(i) 1. Give threads time to run print('Main thread sleeping') time.sleep(5) 登录后复制