os.fork()
wird unter Windows nicht unterstützt und gibt den folgenden Fehler aus:
Die allgemeine Frage ist also Wie führe ich ein Skript aus, das einen Aufruf von os.fork()
unter Windows enthält? . Es macht mir nichts aus, etwas zu benutzen, das nur das Verhalten anspricht und viel langsamer läuft, es ist nur zum Testen. Ich bevorzuge auch, das Skript nicht zu ändern, da es ein 3rd-Party-Modul ist.
Um Ihnen eine breitere Perspektive zu geben, versuche ich das Modul rq
a.k.a redis queue
unter Windows zu verwenden. Irgendwann werde ich den Code auf dem Heroku-Server ausführen, der eine Linux-Maschine ist, aber während der Entwicklung der Web-App verwende ich Windows.
Es gibt keine einfache Möglichkeit, fork()
auf Systemen zu emulieren, auf denen es nicht vorhanden ist, z. B. Windows. Wenn der Code nur fork()
verwendet, um einen neuen Prozess mit exec
zu starten, können Sie ihn so portieren, dass er subprocess
verwendet. Aber das scheint nicht der Fall in rq zu sein, also hast du mehrere Optionen:
Port rq
an Windows, oder bitten Sie jemanden, dies für Sie zu tun. Die einfachste Möglichkeit, den Teil des Codes, der fork()
aufruft, zu portieren, ist die Verwendung des Moduls multiprocessing
. Sie müssen jedoch immer noch andere Teile des Codes ersetzen, die von Unix abhängen, z. B. die Verwendung von signal.alarm()
im Modul timeouts
.
Benutze Python unter Cygwin, das ein voll funktionsfähiges (wenn auch langsames) fork()
emuliert, also hat Cygwin Python ein funktionierendes os.fork()
. Beachten Sie, dass Sie, um os.fork()
zu erhalten, ein von Cygwin gebautes Python verwenden müssen, wie das von Cygwin, und nicht einfach das normale Windows Python unter Cygwin ausführen.
Testen Sie die Anwendung auf einem Linux-Computer, der auf einer virtuellen Maschine ausgeführt wird.
Unter diesen unglücklichen Optionen würde ich die letzte empfehlen.
Importieren Sie einen Wrapper, der den entsprechenden Unterprozessaufruf in einer Funktion namens fork bedingt umschließt, und fügt ihn dem os-Namespace hinzu.
Möglicherweise ist es eine Option, den Anbieter zu kontaktieren und darauf hinzuweisen, dass os.fork keine bevorzugte Option für Sie ist.
Tags und Links python compatibility