Python Multiprocessing error: AttributeError: module '__main__' has no attribute '__spec__'
The problem is not with the code / Python 3.6, it is with Spyder.
After some investigation I found that the code runs fine when executed in an external system terminal but not when run in Spyder's IPython console.
I was able to dump the contents of spec and assign them to a variable that was included inside main to allow this code to function within the IPython console.
from multiprocessing import Pooldef f(x): return x*xif __name__ == '__main__': __spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)" with Pool(5) as p: print (p.map(f, [1, 2, 3]))
pdb users
The question didn't specifically mention Spyder nor Conda (though it is tagged as such). Hence, I will note that I found this can also happen when using pdb.
E.g.
python -m pdb myprogram.py
Passing __spec__ = None
would be a useful workaround if you wanted to persist with pdb.
the same probelm in Spyder (Anaconda3, python 3.6) when I try the external terminal.
Error message: AttributeError: module '__main__' has no attribute '__spec__'
I changed the Run console to 'Excute in current console', and applied it.then if that doesnot work, try other conselor and then change back to 'Excute in current console'.Finally, it works.no '__spec__ = None'
is needed.