multiprocessing.Pool mit maxtasksperchild erzeugt gleiche PIDs

8

Ich muss eine Funktion in einem Prozess ausführen, der mehrmals komplett von dem anderen Speicher isoliert ist. Ich möchte multiprocessing dafür verwenden (da ich eine komplexe Ausgabe serialisieren muss, die von den Funktionen kommt). Ich setze start_method auf 'spawn' und verwende einen Pool mit maxtasksperchild=1 . Ich würde erwarten, für jede Aufgabe einen anderen Prozess zu bekommen und daher eine andere PID zu sehen:

%Vor%

Aber die Ausgabe, die ich bekomme, ist:

%Vor%

Die Prozesse werden also nicht nach jeder Aufgabe neu gestartet. Gibt es eine automatische Möglichkeit, jedes Mal eine neue PID zu erhalten (dh ohne einen neuen Pool für jede Gruppe von Prozessen zu starten)?

    
Zah 19.06.2015, 16:40
quelle

1 Antwort

9

Sie müssen auch chunksize=1 im Aufruf von pool.map angeben. Andernfalls werden mehrere Elemente in Ihrem iterable in einer "Aufgabe" aus der Wahrnehmung der Worker-Prozesse gebündelt:

%Vor%

Ausgabe hat jetzt keine wiederholten PIDs:

%Vor%     
dano 19.06.2015, 16:43
quelle