[英]Pickle error: AttributeError: Can't get attribute on <module '__main__' (built-in)>
[英]Python Multiprocessing error: AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>"
我正在使用 spyder 5.1.5,我正在尝试遵循网站上的第一个示例。 我收到错误:
AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>
task
是我定义的 function。
完整示例代码:
import multiprocessing
import time
def task(num):
print("a",num)
time.sleep(2)
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
根据 Python 的文档:
注意:此 package 中的功能要求
__main__
模块可由子模块导入。 这在编程指南中有介绍,但是,值得在这里指出。 这意味着某些示例,例如multiprocessing.pool.Pool示例将无法在交互式解释器中工作。
Spyder 使用 IPython 控制台,允许您在IPython解释器中执行命令并与数据交互。 然而,正如 Spyder 维护者在此提到的: “在 Spyder 的 IPython 控制台中,多处理在 Windows 上无法正常工作。”
更新您的 Spyder 软件,因为您使用的是旧版本 - 如您所提到的5.1.5 - 版本。 但是,如此处所述, “自我们的5.2.0版本(2021 年 11 月发布)以来,运行多处理代码时生成的打印被捕获并显示在所有操作系统的 IPython 控制台中” 。
更改控制台设置以使用外部终端运行您的代码。 为此,请 go 到: Run
> Configuration per file...
> Execute in an external system terminal
。
如此处所述,您可以将 function 写入单独的文件并将其导入脚本。 例如:
任务.py
import time
def task(num):
print("a",num)
time.sleep(2)
主文件
import multiprocessing
from tasks import task
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.