it-swarm.com.de

Python Multiprocessing-Fehler: AttributeError: Modul '__main__' hat kein Attribut '__spec__'

Ich verwende Python 3.6 und versuche, das erste Beispiel auf der Website unten zu folgen (vollständiger Code auch weiter unten) und erhalte die folgende Fehlermeldung: https://docs.python.org/3.6 /library/multiprocessing.html

Fehlermeldung: AttributeError: module '__main__' has no attribute '__spec__'

Vollständiger Beispielcode:

from multiprocessing import Pool

def f(x):
    return x*x

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

Ich habe versucht, es zu googeln und nach Stack Overflow zu suchen, aber ich habe nur einen anderen Fall dieses Fehlers gefunden und hatte keine Antwort.

14
user8474060

Das Problem liegt nicht beim Code/Python 3.6, sondern beim Spyder.

Nach einiger Untersuchung fand ich heraus, dass der Code gut läuft, wenn er in einem externen Systemterminal ausgeführt wird, aber nicht, wenn er in der IPython-Konsole von Spyder ausgeführt wird. 

Ich konnte den Inhalt von spec ausgeben und einer Variablen zuweisen, die in main enthalten war, damit dieser Code in der IPython - Konsole funktionieren kann.

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

das gleiche Problem in Spyder (Anaconda3, Python 3.6), wenn ich das externe Terminal ausprobiere. __ Fehlermeldung: AttributeError: Modul ' main ' hat kein Attribut ' spec '

Ich habe die Run-Konsole in "Excute in current Console" geändert und angewendet. Wenn dies nicht funktioniert, versuchen Sie es mit einem anderen Conselor und wechseln Sie dann wieder in "Excute in current Console". Endlich klappt esno ' spec = None' wird benötigt.

0
Simin Zuo