threading ejemplos dummy async python multiprocessing pool

ejemplos - python multiprocessing windows



Cómo dejar que Pool.map tome una función lambda (4)

A partir de this respuesta, pathos le permite ejecutar su lambda p.map(lambda x: copy_file(x,target_dir), file_list) directamente, guardando todas las soluciones p.map(lambda x: copy_file(x,target_dir), file_list) / hacks

Tengo la siguiente función:

def copy_file(source_file, target_dir): pass

Ahora me gustaría utilizar multiprocessing para ejecutar esta función de una vez:

p = Pool(12) p.map(lambda x: copy_file(x,target_dir), file_list)

El problema es que el lambda no se puede escabechar, así que esto falla. ¿Cuál es la forma más limpia (pitonica) de arreglar esto?


La pregunta es un poco antigua, pero si aún usas Python 2, mi respuesta puede ser útil.

El truco es usar parte del proyecto pathos : multiprocess tenedor de multiprocesamiento. Se deshace de la molesta limitación del multiproceso original.

Instalación: pip install multiprocess

Uso:

>>> from multiprocess import Pool >>> p = Pool(4) >>> print p.map(lambda x: (lambda y:y**2)(x) + x, xrange(10)) [0, 2, 6, 12, 20, 30, 42, 56, 72, 90]


Use un objeto de función:

class Copier(object): def __init__(self, tgtdir): self.target_dir = tgtdir def __call__(self, src): copy_file(src, self.target_dir)

Para ejecutar su Pool.map :

p.map(Copier(target_dir), file_list)