Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'm using Python 3.6 and am trying to follow along with the very first example at the website below (full code also below) and am getting the below error: https://docs.python.org/3.6/library/multiprocessing.html

Error message: AttributeError: module '__main__' has no attribute '__spec__'

Full example code:

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

I tried Googling it and searching Stack Overflow but I've only found one other case of this error and it did not have an answer.

like image 715
user8474060 Avatar asked Aug 16 '17 17:08

user8474060


1 Answers

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 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])) 
like image 171
user8474060 Avatar answered Sep 24 '22 13:09

user8474060