Multiprocesamiento en Python con múltiples argumentos (palabras clave) [duplicado]
Estoy tratando de guardar 2 archivos json al mismo tiempo en multiprocesamiento. Para esto primero necesito serializar la matriz. Cuando asigno una cls=NumpyArrayEncode
clase en args
multiprocesamiento, recibo un error porque no podemos asignar cls=NumpyArrayEncode
probablemente debido al =
inicio de sesión igual args
en multiprocesamiento.
A continuación se muestra mi código solo para un proceso. Para el segundo proceso, la idea es la misma.
# 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.
¿Cómo agregar cls=NumpyArrayEncode
argumentos en multiprocesamiento?
Buscando una sugerencia amable
Respuestas
1 sim
Dos opciones: usar el kwargs
parámetro (consulte la multiprocessing.Processdocumentación para pasar argumentos de palabras clave:
multiprocessing.Process(target=json.dump,
args=(json_data, fn),
kwargs={"cls": NumpyArrayEncoder})
o usas functools.partial:
multiprocessing.Process(target=functools.partial(json.dump, cls=NumpyArrayEncoder),
args=(json_data, fn))