小编典典

给出AttributeError的多处理示例

python

我正在尝试在代码中实现多处理,因此,我认为我将从一些示例开始学习。我使用了本文档中的第一个示例。

from multiprocessing import Pool
def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

当我运行上面的代码时,我得到一个AttributeError: can't get attribute 'f' on <module '__main__' (built-in)>。我不知道为什么会收到此错误。如果有帮助,我也使用Python 3.5。


阅读 226

收藏
2020-12-20

共1个答案

小编典典

这个问题似乎是multiprocessing.Pool的设计特征。见https://bugs.python.org/issue25053。由于某些原因,Pool并不总是与未在导入模块中定义的对象一起使用。因此,您必须将函数编写到其他文件中并导入模块。

文件: defs.py

def f(x):
    return x*x

档案: run.py

from multiprocessing import Pool
import defs

 if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(defs.f, [1, 2, 3]))

如果您使用打印或其他内置功能,则该示例应适用。如果这不是错误(根据链接),则错误地选择了给定的示例。

2020-12-20