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