2015-09-09 4 views
6

Sono in esecuzione di un programma semplice "Ciao Mondo" su Windows 7 a 64 bit con le seguenti specifiche:programma Multiprocessing ha AttributeError in Anaconda notebook

Python 3.4.3 | Anaconda 2.3.0 (64-bit) | [MSC v.1600 64 bit (AMD64)] IPython 4.0.0 

Il programma:

from multiprocessing import Process, freeze_support 

def f(): 
    print ('hello world!') 

if __name__ == '__main__': 
    #freeze_support() 
    Process(target=f).start() 

ha pronunciato la seguente errore:

[I 15:02:23.855 NotebookApp] Saving file at /uhc/FeatureContributionToK-meansClu 
sterWithPC.ipynb 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
    File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 106, in spawn_main 
    exitcode = _main(fd) 
    File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 116, in _main 
    self = pickle.load(from_parent) 
AttributeError: Can't get attribute 'f' on module '__main__' (built-in) 
+0

Qualcuno ha visto questo errore con la versione (s) di cui sopra? – Sanoj

risposta

4

Ciò è a causa del fatto che il multiprocessing non funziona bene nell'int interprete eractive. Il motivo principale è che non esiste alcuna funzione fork() applicabile in Windows. È spiegato sulla loro stessa pagina web.

"funzionalità all'interno di questo pacchetto richiede che il modulo principale deve essere importabile dai bambini. Questo è trattato nelle linee guida di programmazione Tuttavia vale la pena sottolineare qui. Questo significa che alcuni esempi, come gli esempi multiprocessing.Pool non funzionerà nell'interprete interattivo. "

https://docs.python.org/2/library/multiprocessing.html#windows

Questo stesso problema verrà se si utilizza la funzione piscina in multiprocessing. È risolto in questo post. È quindi possibile utilizzare tale metodo per l'esecuzione della propria idea di elaborazione parallela.

Python multiprocessing apply_async never returns result on Windows 7

Speriamo che sia un'informazione utile a voi.