Multitraitement en Python avec plusieurs arguments (mot-clé) [dupliquer]
J'essaye d'enregistrer 2 fichiers json en même temps en multitraitement. Pour cela, je dois d'abord sérialiser le tableau. Lorsque j'attribue une cls=NumpyArrayEncode
classe en args
multitraitement, j'obtiens une erreur car nous ne pouvons pas attribuer cls=NumpyArrayEncode
probablement en raison d'une =
connexion égale args
en multitraitement.
Voici mon code pour un seul processus. Pour le deuxième processus, l'idée est la même.
# 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.
Comment ajouter cls=NumpyArrayEncode
comme arguments en multitraitement?
À la recherche d'une suggestion aimable
Réponses
1 sim
Deux options: Utilisez le kwargs
paramètre (voir la multiprocessing.Processdocumentation pour passer des arguments de mot-clé:
multiprocessing.Process(target=json.dump,
args=(json_data, fn),
kwargs={"cls": NumpyArrayEncoder})
ou vous utilisez functools.partial:
multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
args=(json_data, fn))