wie man Python-Skript mit os.fork auf Windows ausführen?

8
Der Befehl

os.fork() wird unter Windows nicht unterstützt und gibt den folgenden Fehler aus:

%Vor%

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.

    
zenpoy 25.06.2013, 14:48
quelle

2 Antworten

5

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:

  1. 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 .

  2. 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.

  3. 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.

    
user4815162342 25.06.2013 15:10
quelle
0

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.

    
Steve Barnes 25.06.2013 15:02
quelle

Tags und Links