Wo sollte freeze_support () in ein Python-Skript geschrieben werden?

8

Ich bin verwirrt über die Verwendung von freeze_support() für multiprocessing und ich bekomme ein Runtime Error ohne es. Ich führe nur ein Skript aus und definiere keine Funktion oder ein Modul. Kann ich es noch benutzen? Oder die Pakete, die ich importiere, sollten es benutzt haben?

Hier ist die Dokumentation.

Beachten Sie, dass es sich bei dem spezifischen Problem um scikit-learn calling GridSearchCV handelt, das versucht, Prozesse parallel zu erzeugen. Ich bin mir nicht sicher, ob mein Skript dafür eingefroren werden muss, oder der Code, der aufgerufen wird (aus der Anaconda-Distribution). Wenn Details für diese Frage relevant sind, besuchen Sie die spezifischere Frage .

    
László 23.06.2014, 19:58
quelle

1 Antwort

22

Unter Windows muss all Ihres multiprocessing -benutzenden Codes von if __name__ == "__main__":

geschützt werden

Um sicher zu sein, würde ich all Ihren Code auf die oberste Ebene Ihres Skripts in einer main() -Funktion setzen und dies dann auf oberster Ebene tun:

%Vor%

Siehe den Unterabschnitt "Sicheres Importieren des Hauptmoduls" hier für eine Erklärung von warum das notwendig ist. Sie müssen wahrscheinlich freeze_support überhaupt nicht aufrufen, obwohl es nichts schadet, es einzuschließen.

Beachten Sie, dass es eine bewährte Methode ist, den if __name__ == "__main__" -Wächter für Skripts trotzdem zu verwenden, damit der Code nicht unerwartet ausgeführt wird, wenn Sie zu einem späteren Zeitpunkt in einem anderen Skript import des Skripts eingeben müssen.

    
dano 23.06.2014, 20:30
quelle