Python 如何让Pool.map接受lambda函数
我有以下功能:Python 如何让Pool.map接受lambda函数,python,multiprocessing,pool,Python,Multiprocessing,Pool,我有以下功能: def copy_file(source_file, target_dir): pass 现在我想使用多处理立即执行此函数: p = Pool(12) p.map(lambda x: copy_file(x,target_dir), file_list) 问题是,lambda's不能腌制,所以它失败了。解决此问题的最简洁(pythonic)方法是什么?使用函数对象: class Copier(object): def __init__(self, tgtdir
def copy_file(source_file, target_dir):
pass
现在我想使用多处理
立即执行此函数:
p = Pool(12)
p.map(lambda x: copy_file(x,target_dir), file_list)
问题是,lambda's不能腌制,所以它失败了。解决此问题的最简洁(pythonic)方法是什么?使用函数对象:
class Copier(object):
def __init__(self, tgtdir):
self.target_dir = tgtdir
def __call__(self, src):
copy_file(src, self.target_dir)
要运行您的池.map
:
p.map(Copier(target_dir), file_list)
或者Python3,您可以使用:
这个问题有点老了,但若你们仍然在使用Python2,我的答案可能会很有用 诀窍是使用项目的一部分:多处理分支。它摆脱了原有多进程的烦人限制 安装:
pip安装多进程
用法:
>>> 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]
从answer,pathos让你直接运行你的lambda
p.map(lambda x:copy_file(x,target_dir),file_list)
,保存所有的解决方法/黑客谢谢,这确实是我需要的!谢谢我真希望他们能接受lambda函数!如果copy\u file
是self.copy\u file
中的一个方法,该怎么办?这个方法甚至看起来更干净。。。稍后我将决定使用哪一个作为我的答案,这个答案仍然是a+1,因为它较短(在Python 3中,也就是;),作为更新functools在这里登陆要晚得多。在Python 2.7中,partial
也是可以选择的。这个解决方案最好使用它来修复对非同构图的并行搜索。它比Fred Foo的解决方案快15倍
>>> 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]