我正在尝试在代码中实现多处理,因此,我认为我将从一些示例开始学习。我使用了本文档中的第一个示例。
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。
AttributeError: can't get attribute 'f' on <module '__main__' (built-in)>
这个问题似乎是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]))
如果您使用打印或其他内置功能,则该示例应适用。如果这不是错误(根据链接),则错误地选择了给定的示例。