私は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つしか見つからず、答えがありませんでした。
問題はコードにありません/ 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]))
spyderの同じprobelm(Anaconda3、python 3.6)で外部端末を試すと、エラーメッセージ:AttributeError:module 'main' has no attribute '仕様 '
実行コンソールを「現在のコンソールで実行」に変更して適用しました。うまくいかない場合は、他のconselorを試してから、「現在のコンソールで実行」に戻ってください。最後に、それは動作します。 「spec = None」は不要です。