Comment laisser de la Piscine.carte prendre une fonction lambda
J'ai la fonction suivante:
def copy_file(source_file, target_dir):
pass
Maintenant je voudrais utiliser multiprocessing
à l'exécution de cette fonction à la fois:
p = Pool(12)
p.map(lambda x: copy_file(x,target_dir), file_list)
Le problème est, lambda ne peut pas être mariné, de sorte que cela échoue. Ce qui est le plus soigné (pythonic) moyen de résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Utiliser un objet de fonction:
Pour exécuter votre
Pool.map
:copy_file
ont étéself.copy_file
dans une méthode?Pour Python2.7+ ou Python3, vous pouvez utiliser functools.partielle:
functools.partial
est également picklable en python 2.7.Question est un peu vieux mais si vous êtes toujours utiliser Python 2 ma réponse peut être utile.
Astuce consiste à utiliser une partie de pathétique projet: multi process fourche de multitraitement. Il se débarrasser de l'ennuyeux limitation de l'original multi process.
Installation:
pip install multiprocess
Utilisation:
De cette réponse, le pathos vous permet d'exécuter vos lambda
p.map(lambda x: copy_file(x,target_dir), file_list)
directement, l'enregistrement de toutes les solutions de contournement /hacks