2017-10-23 4 views
-2

Während die multiprocessing.py (Inhalt der Datei unten) läuftPython - Import: nicht importieren Name 'Pool'

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

ich Import: kann nicht importieren Name 'Pool'

I habe auch die 2 Lösungen ausprobiert - python - ImportError: cannot import name Pool aber leider besteht das Problem.

+0

Hinzufügen von Informationen über Ihr System und wie Sie Python installiert haben, könnte wirklich hilfreich sein. –

+0

Was passiert, wenn Sie in einem neu gestarteten Python-Interpreter nur 'from multiprocessing import Pool' ausführen? –

+2

Benennen Sie Ihre Module nicht wie andere Module, die Sie verwenden möchten. Sie importieren Ihr eigenes Modul anstelle des in der Standardbibliothek. – Goyo

Antwort

0

Um den Importfehler loszuwerden, benennen Sie die Datei anders als multiprocessing.py, da der Dateiname nicht dem Modulnamen entsprechen sollte.

Sie können die Pool-Funktion nach einer Änderung des Dateinamens importieren und Ihr Code sollte auf Python3 funktionieren. Aber wenn Sie Python2 verwenden, wird der Code nicht funktionieren.

In Python 2.x und 3.0, 3.1 und 3.2, multiprocessing.Pool() Objekte sind keine Kontextmanager. Sie können sie nicht mit der Anweisung verwenden. Nur in Python 3.3 und höher können Sie sie als solche verwenden.

Aus dem Python 3 multiprocessing.Pool() Dokumentation:

New in version 3.3: Pool objects now support the context management protocol – see Context Manager Types. enter() returns the pool object, and exit() calls terminate().

Im Folgenden Code

from multiprocessing import Pool 

def f(x): 
    return x*x 

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

Ausgabe auf python2 arbeiten

[1, 4, 9] 
+1

Wie kann das einen Unterschied machen, wenn 'Pool' nicht importiert werden kann? – Goyo

0

Wenn Sie versuchen, und eine Bibliothek importieren Python sucht in einer bestimmten Schrittfolge nach dem Modulnamen. Wenn Sie die Datei also gleich dem Modulnamen benennen, lädt sie Ihre Datei, nicht die Bibliothek. Da Ihre Datei keine Pool-Funktion hat, kann sie nicht importiert werden. Wenn Multiprocessing ein eingebautes Modul wäre, würde dieser Fehler nicht kommen, aber es wird nicht empfohlen, Dateien wie die Python-Bibliotheken oder -Module zu benennen.

Sehen Sie die akzeptierte Antwort hier, um diesen Prozess besser zu verstehen. How does python find a module file if the import statement only contains the filename?

+0

Um weiter hinzuzufügen, sollte das Verwenden des Schlags an der Spitze auch Ihr Problem lösen, wenn Sie die gleichen wie eingebaute Module benennen von __future__ import absolute_import – kmcodes

Verwandte Themen