Python 多处理错误:AttributeError:无法在 <module '__main__' (built-in)>”

问题描述 投票:0回答:1

我正在使用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 multiprocessing spyder
1个回答
3
投票

根据Python的文档

注意: 此软件包中的功能需要

__main__
模块可以被孩子们导入。这在编程中有介绍 但是,这里值得指出。这意味着一些 示例,例如 multiprocessing.pool.Pool 示例将不起作用 在交互式翻译器中。

Spyder 使用 IPython 控制台,允许您在

IPython 解释器内执行命令并与数据交互。然而,正如 Spyder 维护者所提到的here“多重处理在 Windows 上的 Spyder 的 IPython 控制台中运行不佳。”

选项1

更新您的 Spyder 软件,因为您使用的是旧版本 - 正如您提到的

5.1.5 版本。但是,如此处所述,“自我们的 5.2.0 版本(于 2021 年 11 月发布)以来,运行多处理代码时生成的打印将被捕获并显示在所有操作系统的 IPython 控制台中”

选项2

更改控制台设置以使用外部终端运行代码。为此,请访问:

Run

 > 
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()
    
© www.soinside.com 2019 - 2024. All rights reserved.