如何在 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 瀏覽次數

開始你的 職業

完成課程認證

開始
廣告