Многопроцессорность в Python с несколькими (ключевыми) аргументами [дубликат]
Я пытаюсь сохранить 2 файла json одновременно в многопроцессорной обработке. Для этого сначала мне нужно сериализовать массив. Когда я назначаю cls=NumpyArrayEncode
класс в args
многопроцессорной обработке, я получаю сообщение об ошибке, потому что мы не можем назначить, cls=NumpyArrayEncode
вероятно, из-за равного =
входа args
в многопроцессорную обработку.
Ниже мой код только для одного процесса. Для второго процесса идея такая же.
# 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.
Как добавить в cls=NumpyArrayEncode
качестве аргументов в многопроцессорность?
Ищу доброе предложение
Ответы
1 sim
Два варианта: используйте kwargs
параметр (см. multiprocessing.ProcessДокументацию, чтобы передать аргументы ключевого слова:
multiprocessing.Process(target=json.dump,
args=(json_data, fn),
kwargs={"cls": NumpyArrayEncoder})
или вы используете functools.partial:
multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
args=(json_data, fn))