2017-05-22 2 views
0

Die Poolfunktion des Multiprocessing löscht alle Parameter, die an sie übergeben werden, und erstellt sie anschließend im Pool neu.Multiprocessing-Pool mit Parametern, die nicht serialisiert werden können

In meinem Beispiel habe ich einige Parameter, die nicht gepickt werden können (sie sind C++ - Objekte) und sie brauchen viel Zeit zu erstellen.

Gibt es eine Möglichkeit, diese Parameter in den Pool zu übergeben, ohne sie serialisieren zu müssen?

Antwort

0

multiprocessing.Pool ermöglicht es, eine Initialisierungsfunktion zu übergeben, die jedes Mal ausgeführt wird, wenn ein neuer Arbeitsprozess generiert wird.

Sie können diese Funktion verwenden, um Ihre C++ - Objekte zu initialisieren. Jeder Prozess wird seine eigene Kopie haben.

from multiprocessing import Pool 

parameters = None 

def initializer(): 
    global parameters 

    parameters = initialize_cpluplus_objects() 

def function(): 
    parameters.do_something() 


pool = Pool(initializer=initializer_function) 
pool.apply_async(function) 
Verwandte Themen