相关疑难解决方法(0)

如何让Pool.map采用lambda函数

我有以下功能:

def copy_file(source_file, target_dir):
    pass
Run Code Online (Sandbox Code Playgroud)

现在我想用来立即multiprocessing执行这个功能:

p = Pool(12)
p.map(lambda x: copy_file(x,target_dir), file_list)
Run Code Online (Sandbox Code Playgroud)

问题是,lambda不能被腌制,所以这就失败了.解决这个问题最简洁(pythonic)的方法是什么?

python pool multiprocessing

50
推荐指数
3
解决办法
2万
查看次数

Python可以腌制lambda函数吗?

我已经阅读了许多线程,Python pickle/ cPickle不能pickle lambda函数.但是,以下代码使用Python 2.7.6:

import cPickle as pickle

if __name__ == "__main__":
    s = pickle.dumps(lambda x, y: x+y)
    f = pickle.loads(s)
    assert f(3,4) == 7
Run Code Online (Sandbox Code Playgroud)

那么发生了什么?或者说,酸洗lambdas的限制是什么?

[编辑]我想我知道为什么这个代码运行.我忘了(抱歉!)我正在运行无堆栈python,它有一种称为tasklet执行函数的微线程形式.这些tasklet可以暂停,腌制,打开并继续,所以我猜(在无堆栈邮件列表上询问)它还提供了一种方法来挑选函数体.

python lambda pickle python-2.7

48
推荐指数
3
解决办法
4万
查看次数

标签 统计

python ×2

lambda ×1

multiprocessing ×1

pickle ×1

pool ×1

python-2.7 ×1