übergibt kwargs mit multiprocessing.pool.map

8

Ich möchte Schlüsselworte an meine worker-Funktion mit Pool.map () übergeben. Ich kann kein klares Beispiel dafür finden, wenn ich Foren suche.

Beispielcode:

%Vor%

Ausgabe:

%Vor%

Der Typfehler hat mit dem Parsen von Argumenten innerhalb von Multiprocessing.Pool oder Queue zu tun, und ich habe verschiedene andere Syntaxen ausprobiert, wie zum Beispiel eine Liste der Kwargs; [kwargs, kwargs, kwargs, kwargs], sowie mehrere Versuche, den Kwarg in die Jobliste aufzunehmen, aber kein Glück. Ich habe den Code in multiprocessing.pool von map nach map_async verfolgt und bin so weit gekommen %Code% in pool.py, als ich die Generatorstruktur antraf. Ich bin glücklich, in Zukunft mehr darüber zu erfahren, aber im Moment versuche ich nur herauszufinden:

Gibt es eine einfache Syntax für die Weitergabe von Kwargs mit pool.map?

    
karl k 01.12.2015, 22:47
quelle

2 Antworten

8

Wenn Sie über die anderen Argumente iterieren möchten, verwenden Sie die Antwort von @ ArcturusB.

Wenn Sie sie einfach weitergeben möchten und für jede Iteration den gleichen Wert haben, können Sie dies tun:

%Vor%

Partiell "bindet" Argumente an eine Funktion. Alte Versionen von Python können jedoch Teilobjekte nicht serialisieren.

    
Mark 07.09.2016 10:02
quelle
6

multiprocessing.pool.Pool.map doc gibt Folgendes an:

  

Ein paralleles Äquivalent der integrierten Funktion map () ( es unterstützt jedoch nur ein iterables Argument ). Es blockiert, bis das Ergebnis fertig ist.

Wir können nur ein iterables Argument übergeben. Das Ende der Geschichte. Aber wir können glücklicherweise an einen Workaround denken: Definieren Sie worker_wrapper function, die ein einzelnes Argument benötigt, entpackt es in args und kwargs und übergibt sie an worker :

%Vor%

In Ihrer wrapper_process müssen Sie dieses einzelne Argument aus erstellen jobs (oder sogar direkt beim Erstellen von Jobs) und rufen Sie worker_wrapper :

auf %Vor%

Hier ist eine funktionierende Implementierung, die so nah wie möglich an Ihrem Original ist Code:

%Vor%

Was den Test besteht:

%Vor%     
Arcturus B 22.04.2016 16:40
quelle

Tags und Links