Python多处理错误:AttributeError:module' __ main __'没有属性' __ spec __'

时间:2017-08-16 17:56:24

标签: python multiprocessing python-multiprocessing spyder

我正在使用Python 3.6,并尝试按照下面网站上的第一个示例(下面的完整代码)并得到以下错误: https://docs.python.org/3.6/library/multiprocessing.html

错误讯息: AttributeError: module '__main__' has no attribute '__spec__'

完整的示例代码:

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]))

我尝试使用Google搜索并搜索Stack Overflow,但我只发现了另一个此错误的情况,但没有答案。

3 个答案:

答案 0 :(得分:27)

问题不在于代码/ Python 3.6,而在于Spyder。

经过一番调查后,我发现代码在外部系统终端中运行时运行正常,但在Spyder的IPython控制台中运行时却没有。

我能够转储 spec 的内容,并将它们分配给 main 中包含的变量,以允许此代码在IPython控制台中运行。

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    __spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)"
    with Pool(5) as p:
       print (p.map(f, [1, 2, 3]))

答案 1 :(得分:2)

pdb用户

该问题并未具体提及Spyder或Conda(尽管已被标记为此类)。因此,我会注意到我发现使用pdb时也会发生这种情况。

例如

python -m pdb myprogram.py

通过 spec = None(无)将是一个有用的解决方法,如果您想坚持使用pdb。

答案 2 :(得分:0)

当尝试外部终端时,在Spyder中使用相同的探针(Anaconda3,python 3.6)。 错误消息:AttributeError:模块' main '没有属性' spec '

我将“运行”控制台更改为“在当前控制台中执行”,并应用了它。 然后,如果这不起作用,请尝试其他conselor,然后改回“在当前控制台中执行”。 终于,它起作用了。 不需要“ 规范 =无”。