要在一堆工作线程之间分配工作,请使用并发.futures 模块,尤其是 ThreadPoolExecutor 类。
有了这个替代方案,如果您想精细控制调度算法,您可以手动编写自己的逻辑。使用队列模块创建包含作业列表的队列。 Queue 类维护一个对象列表,并具有将项目添加到队列的 .put(obj) 方法和返回项目的 .get() 方法。该类将负责必要的锁定,以确保每个作业只分发一次。
以下是一个示例 -
import threading, queue, time # The worker thread gets jobs off the queue. When the queue is empty, it # 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) # Create a queue q = queue.Queue() # Start a pool of 5 workers for i in range(5): t = threading.Thread(target=worker, name='worker %i' % (i+1)) t.start() # Begin adding work to the queue for i in range(50): q.put(i) # Give threads time to run print('Main thread sleeping') time.sleep(5)
Running worker Running worker Running worker Running worker Running worker Main thread sleeping Worker running with argument 0 Worker running with argument 1 Worker running with argument 2 Worker running with argument 3 Worker running with argument 4 Worker running with argument 5 Worker running with argument 6 Worker running with argument 7 Worker running with argument 8 Worker running with argument 9 Worker running with argument 10 Worker running with argument 11 Worker running with argument 12 Worker running with argument 13 Worker running with argument 14 Worker running with argument 15 Worker running with argument 16 Worker running with argument 17 Worker running with argument 18 Worker running with argument 19 Worker running with argument 20 Worker running with argument 21 Worker running with argument 22 Worker running with argument 23 Worker running with argument 24 Worker running with argument 25 Worker running with argument 26 Worker running with argument 28 Worker running with argument 29 Worker running with argument 27 Worker running with argument 30 Worker running with argument 31 Worker running with argument 32 Worker running with argument 33 Worker running with argument 34 Worker running with argument 35 Worker running with argument 36 Worker running with argument 37 Worker running with argument 38 Worker running with argument 39 Worker running with argument 40 Worker running with argument 41 Worker running with argument 42 Worker running with argument 43 Worker running with argument 44 Worker running with argument 45 Worker running with argument 46 Worker running with argument 47 Worker running with argument 48 Worker running with argument 49 Worker queue empty Worker queue empty Worker queue empty Worker queue empty Worker queue empty
以上是如何在Python中将工作分配给一组工作线程?的详细内容。更多信息请关注PHP中文网其他相关文章!