Mehrfachverarbeitung in Python mit mehreren (Schlüsselwort-) Argumenten [Duplikat]

Jan 11 2021

Ich versuche, 2 JSON-Dateien gleichzeitig in Multiprocessing zu speichern. Dazu muss ich zuerst das Array serialisieren. Wenn ich in Multiprocessing eine cls=NumpyArrayEncodeKlasse argszuordne, wird eine Fehlermeldung angezeigt, da wir cls=NumpyArrayEncodewahrscheinlich aufgrund der gleichen =Anmeldung argsin Multiprocessing keine Zuweisung vornehmen können.

Unten ist mein Code nur für einen Prozess. Für den zweiten Prozess ist die Idee dieselbe.

# json serialization
class NumpyArrayEncode(JSONEncoder):
    def default(self, o):
        if isinstance(o, np.ndarray):
            returno.tolist()
        return JSONEncoder.default(self, o)

json_data = np.array([[3, 5, 6], [8, 12, 6]]) # example

with open('test.json', 'w') as fn:
    p1 = multiprocessing.Process(target = json.dump, args=(json_data, fn, cls=NumpyArrayEncode)) # here is problem that we can't add equal `=` sign in `args` in multiprocessing. 

Wie füge ich cls=NumpyArrayEncodeals Argumente in der Mehrfachverarbeitung hinzu?

Auf der Suche nach freundlichen Vorschlägen

Antworten

1 sim Jan 11 2021 at 14:49

Zwei Optionen: Verwenden Sie den kwargsParameter (siehe multiprocessing.ProcessDokumentation zum Übergeben von Schlüsselwortargumenten:

multiprocessing.Process(target=json.dump,
                        args=(json_data, fn),
                        kwargs={"cls": NumpyArrayEncoder})

oder Sie verwenden functools.partial:

multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
                        args=(json_data, fn))