web-dev-qa-db-ja.com

Python Multiprocessing error:AttributeError:module '__main__' has have no attribute '__spec__'

私はPython 3.6を使用しており、以下のWebサイトで最初の例(完全なコードも以下)をたどろうとしていますが、以下のエラーが発生しています: 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]))

グーグルでスタックオーバーフローを検索しようとしましたが、このエラーのケースが1つしか見つからず、答えがありませんでした。

17
user8474060

問題はコードにありません/ 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]))
27
user8474060

spyderの同じprobelm(Anaconda3、python 3.6)で外部端末を試すと、エラーメッセージ:AttributeError:module 'main' has no attribute '仕様 '

実行コンソールを「現在のコンソールで実行」に変更して適用しました。うまくいかない場合は、他のconselorを試してから、「現在のコンソールで実行」に戻ってください。最後に、それは動作します。 「spec = None」は不要です。

1
Simin Zuo