Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verteile ich Arbeit auf eine Reihe von Arbeitsthreads in Python?

Wie verteile ich Arbeit auf eine Reihe von Arbeitsthreads in Python?

王林
王林nach vorne
2023-08-26 16:17:14766Durchsuche

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.

Beispiel

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)

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen