web-dev-qa-db-fra.com

Erreur de multitraitement Python: AttributeError: le module '__main__' n'a pas d'attribut '__spec__'

J'utilise Python 3.6 et j'essaie de suivre le tout premier exemple sur le site Web ci-dessous (code complet également ci-dessous) et j'obtiens l'erreur ci-dessous: https://docs.python.org/3.6 /library/multiprocessing.html

Message d'erreur: AttributeError: module '__main__' has no attribute '__spec__'

Exemple de code complet:

from multiprocessing import Pool

def f(x):
    return x*x

if __== '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

J'ai essayé googler et rechercher Stack Overflow mais je n'ai trouvé qu'un seul autre cas d'erreur et il n'a pas eu de réponse.

14
user8474060

Le problème n'est pas avec le code/Python 3.6, c'est avec Spyder.

Après quelques recherches, j'ai constaté que le code fonctionne correctement lorsqu'il est exécuté dans un terminal système externe, mais pas lorsqu'il est exécuté dans la console IPython de Spyder. 

J'ai pu vider le contenu de spec et les assigner à une variable incluse dans main pour permettre à ce code de fonctionner dans la console IPython.

from multiprocessing import Pool

def f(x):
    return x*x

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

même problème dans Spyder (Anaconda3, 3.6) quand j'essaie le terminal externe . Message d'erreur: AttributeError: module ' main ' n'a pas d'attribut ' spec '

J'ai changé la console Exécuter en «Exécuter dans la console actuelle» et je l'ai appliquée… .. puis si cela ne fonctionne pas, essayez avec un autre conselor, puis vous revenez à «Exécuter dans la console actuelle»… .. Enfin, cela fonctionne .no ' spec = None' est nécessaire.

0
Simin Zuo