Wieloprocesorowość w Pythonie z wieloma argumentami (słowa kluczowe) [duplikat]
Jan 11 2021
Próbuję zapisać 2 pliki json w tym samym czasie w przetwarzaniu wieloprocesowym. W tym celu najpierw muszę serializować tablicę. Kiedy przypisuję cls=NumpyArrayEncode
klasę w trybie args
wieloprocesowym, pojawia się błąd, ponieważ nie możemy przypisać cls=NumpyArrayEncode
prawdopodobnie z powodu równości =
logowania args
w przetwarzaniu wieloprocesowym.
Poniżej znajduje się mój kod tylko dla jednego procesu. Idea drugiego procesu jest taka sama.
# 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.
Jak dodać cls=NumpyArrayEncode
jako argumenty w przetwarzaniu wieloprocesowym?
Szukam miłej sugestii
Odpowiedzi
1 sim Jan 11 2021 at 14:49
Dwie opcje: użyj kwargs
parametru (zobacz multiprocessing.Processdokumentację, aby przekazać argumenty słów kluczowych:
multiprocessing.Process(target=json.dump,
args=(json_data, fn),
kwargs={"cls": NumpyArrayEncoder})
lub używasz functools.partial:
multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
args=(json_data, fn))