Ich versuche, Aufträge an einen Pool eins nach dem anderen zu senden (aufgrund der Speicherbegrenzungen kann ich keine Karte verwenden). Ist es möglich, dass der Pool verdaut wird, wenn er verfügbare Mitarbeiter hat und ansonsten warten muss? z.B. kann ich sowas machen? p = Pool(n_workers) for item in list: p.work_on_this(item)
wobei work_on_this
den Job sendet, wenn der Pool mehr Arbeiter zur Verfügung hat und ansonsten warten, bis es funktioniert.Multiprocessing Python ist es möglich, einen Job in den Pool zu senden
0
A
Antwort
0
Die Lösung des Problems besteht in der Verwendung eines Semaphors, der mit der Anzahl der Worker initialisiert wurde. Sie erwerben und lösen den Semaphor vor dem Füttern des Pools und nachdem ein Arbeiter die Aufgabe erfüllt hat.
Hier ist ein Beispiel mit Python 2.6 oder höher.
from threading import Semaphore
from multiprocessing import Pool
def TaskManager:
def __init__(self, processes):
self.pool = Pool(processes=processes)
self.workers = Semaphore(processes)
def new_task(self):
"""Start a new task, block if all workers are busy."""
self.workers.acquire()
self.pool.apply_async(function, callback=self.task_done)
def task_done(self, results):
"""Called once task is done, releases the caller if blocked."""
self.workers.release()
Verwandte Themen
- 1. Python Multiprocessing Pool vs Multiprocessing ThreadPool
- 2. Python Multiprocessing Pool mit map_async
- 3. Python Multiprocessing: Pool von benutzerdefinierten Prozessen
- 4. Multiprocessing Pool Beispiel (parallel) ist langsamer als sequenziell. Versuchen, Pool in Python zu verstehen
- 5. Python Multiprocessing-Pool hängt auf Ubuntu-Server
- 6. Verwendung von initialisieren in Python Multiprocessing-Worker-Pool
- 7. Ist es möglich, azurblaue Warteschlangennachrichten an einen Endpunkt zu senden?
- 8. Ist es möglich, einen Buchstabenbereich in Python zu erstellen?
- 9. Prozess kann nicht in Python Multiprocessing-Pool stoppen
- 10. Ist es möglich, ein Python-Wörterbuch in AMQP zu legen?
- 11. Ist es möglich, einen Subprozess zu erneuern?
- 12. Ist es möglich, eine Remote-Anfrage an einen Webservice zu senden, ohne den Proxy zu verwenden?
- 13. Python Multiprocessing: Senden von Daten an einen Prozeß
- 14. Warum Python-Multiprocessing wird sequenziell ausgeführt?
- 15. Ist es möglich, einen Windows-Dienst mit Python zu schreiben?
- 16. Ist es möglich, einen Webbrowser mit Python zu entwickeln?
- 17. Ist es möglich, einen Stellantrieb mit Dronekit Python zu steuern?
- 18. Macht es Sinn, einen Pool von Akteuren zu benutzen?
- 19. Python Multiprocessing-Pool auf Windows 8.1 laicht nur ein Arbeiter
- 20. Rails 4 - Verzögerter Job - Ist es möglich, die Job-ID in der Perform-Methode zu kennen?
- 21. Ist es möglich, einen bereits erstellten Job in einem Knoten zu aktualisieren? Js
- 22. Finding Ausnahme in Python Multiprocessing
- 23. ist es möglich, einen Objekt-Pool ähnlich dem String zu erstellen?
- 24. Ist es möglich, nur einen Token über den MVVM Light Messenger zu senden?
- 25. Ist es möglich, einen Gradienten zu zeichnen?
- 26. Ist es möglich, einen Datenbanktransaktionsparameter zu verfälschen?
- 27. Ist es möglich, einen Systemdienst in Android
- 28. python multiprocessing mit maxtasksperchild
- 29. Ist es möglich, einen Vorlagenalias zu erstellen?
- 30. Multiprocessing/Multithreading in Python ..?
Sie könnten für etwas ähnliches wie http://stackoverflow.com/questions/17909132/python-multiprocessing-set-spawning-process-to-wait suchen. Ich denke, damit kann eine Logik aufgebaut werden. – pmaniyan
Sind Sie sicher, dass Sie 'map' nicht verwenden können? Wenn Sie 'chunksize = 1' setzen, werden die Jobs nacheinander gesendet. – tdelaney
Wie wäre es mit 'imap' anstatt mit' map'? – tjollans