我正在尝试在我的代码中实现多处理,因此,我认为我应该从一些示例开始学习。我使用了本 文档 中的第一个示例。
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。
原文由 PiccolMan 发布,翻译遵循 CC BY-SA 4.0 许可协议
这个问题似乎是 multiprocessing.Pool 的设计特点。请参阅 https://bugs.python.org/issue25053 。由于某些原因,Pool 并不总是与未在导入模块中定义的对象一起使用。所以你必须将你的函数写入不同的文件并导入模块。
文件: defs.py
文件: run.py
如果您使用 print 或其他内置函数,该示例应该有效。如果这不是错误(根据链接),则给定的示例选择不当。