2014-06-23 13 views
7

Sono confuso sull'uso di freeze_support() per multiprocessing e ottengo uno Runtime Error senza di esso. Sto solo eseguendo uno script, non definendo una funzione o un modulo. Posso ancora usarlo? O i pacchetti che ho importato avrebbero dovuto usarlo?dove mettere freeze_support() in uno script Python?

Here è la documentazione.

Si noti che il problema specifico è circa scikit-learn chiamando GridSearchCV che tenta di generare processi in parallelo. Non sono sicuro che il mio script debba essere bloccato per questo, o il codice che viene chiamato (dalla distro di Anaconda). Se i dettagli sono pertinenti a questa domanda, per favore vai al più specifico question.

+0

Come viene eseguito lo script? – dano

+0

@dano OK, quindi la domanda specifica è rilevante. Ho incollato il mio intero codice lì. (Ma il link puntava alla domanda sbagliata, l'ho risolto.) Eseguito in un interprete Python dedicato (da Spyder). –

risposta

20

In Windows tutto del vostro multiprocessing codice -utilizzando deve essere protetta da if __name__ == "__main__":

Quindi, per essere sicuro, vorrei mettere tutto il vostro codice attualmente al livello superiore dello script in una funzione main() , e poi basta fare questo al livello superiore:

if __name__ == "__main__": 
    main() 

vedere il "importazione sicuro di modulo principale" sottosezione here per una spiegazione del motivo per cui ciò è necessario. Probabilmente non è necessario chiamare lo freeze_support, anche se non danneggerà nulla per includerlo.

Si noti che si tratta di una buona pratica di utilizzare la guardia if __name__ == "__main__" per gli script in ogni caso, in modo che il codice non viene eseguito in modo imprevisto se si scopre che è necessario per import lo script in un altro script ad un certo punto in futuro.

+0

Suona alla grande, grazie, ti farò sapere come è andata a finire, e quindi sono felice di accettare. –

+2

l'unico scenario che non copre è quando qualcuno crea un oggetto che eredita da Process, cioè: class myProcess (Process), dove inserisci quindi freeze_support in quello scenario? – Har