Multiprocessing in Python con più argomenti (parole chiave) [duplicato]
Sto cercando di salvare 2 file JSON contemporaneamente in multiprocessing. Per questo prima ho bisogno di serializzare l'array. Quando assegno la cls=NumpyArrayEncode
classe in args
multiprocessing, ricevo un errore perché non possiamo assegnare cls=NumpyArrayEncode
probabilmente a causa del =
segno di uguale args
in multiprocessing.
Di seguito è riportato il mio codice solo per un processo. Per il secondo processo l'idea è la stessa.
# 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.
Come aggiungere cls=NumpyArrayEncode
come argomenti in multiprocessing?
Alla ricerca di un gentile suggerimento
Risposte
Due opzioni: utilizzare il kwargs
parametro (consultare la multiprocessing.Processdocumentazione per passare gli argomenti delle parole chiave:
multiprocessing.Process(target=json.dump,
args=(json_data, fn),
kwargs={"cls": NumpyArrayEncoder})
oppure usi functools.partial:
multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
args=(json_data, fn))