如何在 Python 中在一些工作线程之间分配工作?


要将工作分配给一堆工作线程,请使用 concurrent.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

更新日期:20-9-2022

123 浏览次数

开始你的 职业

完成课程认证

开始
广告