我正在使用spyder 5.1.5,我正在尝试遵循网站上的第一个示例。 我收到错误:
AttributeError: Can't get attribute 'task' on <module '__main__' (built-in)>
task
是我定义的函数。
完整示例代码:
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的文档:
Spyder 使用 IPython 控制台,允许您在注意: 此软件包中的功能需要
模块可以被孩子们导入。这在编程中有介绍 但是,这里值得指出。这意味着一些 示例,例如 multiprocessing.pool.Pool 示例将不起作用 在交互式翻译器中。__main__
IPython 解释器内执行命令并与数据交互。然而,正如 Spyder 维护者所提到的here: “多重处理在 Windows 上的 Spyder 的 IPython 控制台中运行不佳。”
选项15.1.5 版本。但是,如此处所述,“自我们的 5.2.0 版本(于 2021 年 11 月发布)以来,运行多处理代码时生成的打印将被捕获并显示在所有操作系统的 IPython 控制台中”。
选项2Run
>
Configuration per file...
>
Execute in an external system terminal
(在控制台下)。选项3
here所述,您可以将函数写入单独的文件并将其导入脚本中。例如:
任务.py
import time
def task(num):
print("a",num)
time.sleep(2)
main.py
import multiprocessing
from tasks import task
if __name__ == '__main__':
for i in range(10):
p = multiprocessing.Process(target=task,args=(i,))
p.start()