Heim >Backend-Entwicklung >Python-Tutorial >Wie verteile ich Arbeit auf eine Reihe von Arbeitsthreads in Python?
Um die Arbeit auf eine Reihe von Arbeitsthreads zu verteilen, verwenden Sie insbesondere das gleichzeitige .futures-Modul ThreadPoolExecutor-Klasse.
Mit dieser Alternative können Sie Ihre eigene Logik manuell programmieren, wenn Sie eine genaue Kontrolle über den Planungsalgorithmus wünschen. Verwenden Sie das Warteschlangenmodul, um eine Warteschlange mit einer Liste von Jobs zu erstellen. Die Queue-Klasse verwaltet eine Liste von Objekten und verfügt über eine .put(obj)-Methode, die Elemente zur Warteschlange hinzufügt, und eine .get()-Methode, die ein Element zurückgibt. Diese Klasse kümmert sich um die notwendigen Sperren, um sicherzustellen, dass jeder Job nur einmal verteilt wird.
Hier ist ein Beispiel -
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
Das obige ist der detaillierte Inhalt vonWie verteile ich Arbeit auf eine Reihe von Arbeitsthreads in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!