Ich bin neugierig, wie die Global Interpreter Lock in Python tatsächlich funktioniert. Wenn ich eine C++ - Anwendung starte, werden vier separate Instanzen eines Python-Skripts parallel auf separaten Kernen ausgeführt, oder geht die GIL noch tiefer als nur der einzelne Prozess, der gestartet wurde, und steuert alle Python-Prozesse unabhängig vom Prozess, der sie hervorgebracht hat ?Führt das Ausführen separater Python-Prozesse die GIL aus?
Antwort
Die GIL betrifft nur Threads innerhalb eines einzelnen Prozesses. Das Modul multiprocessing
ist in der Tat eine Alternative zu threading
, mit der Python-Programme mehrere Kerne verwenden können & c. In Ihrem Szenario können Sie problemlos auch mehrere Kerne verwenden.
Wie Alex Martelli darauf hinweist, dass Sie die GIL tatsächlich umgehen können, indem Sie mehrere Prozesse ausführen, möchte ich nur hinzufügen und darauf hinweisen, dass die GIL eine Einschränkung der Implementierung (CPython) und nicht von Python im Allgemeinen ist Implementiere Python ohne diese Einschränkung. Stackless Python kommt in den Sinn.
Dies ist ein häufiges Missverständnis über Stackless. Stackless hilft nicht dabei, mehrere Kerne zu nutzen. Siehe http://www.stackless.com/pipermail/stackless/2007-August/001963.html –
- 1. Anwendung in separater Sitzung ausführen?
- 2. Hat Jython die GIL?
- 3. Wann wird die GIL veröffentlicht?
- 4. CreateProcessAsUser führt die Anwendung nicht aus
- 5. Führt "from-import" das gesamte Modul aus?
- 6. Eclipse führt die falsche Java-Datei aus
- 7. Führt Sphinx meinen Code beim Ausführen von 'make html' aus?
- 8. Hat die V8-Javascript-Engine eine GIL?
- 9. Warum brauche ich die Gil für PyMem_Malloc()?
- 10. Wo ist die GIL in PyPy?
- 11. Führt foreach die Abfrage nur einmal aus?
- 12. Python: GIL Kontext - Switching
- 13. Ausführen von Fabric-Befehl in separater Prozessgruppe Hängen
- 14. Führt die .dispose() -Methode überhaupt etwas aus?
- 15. Führt die .pipe() -Memcpy in node.js aus?
- 16. Führt Java die Dinge nicht asynchron aus?
- 17. ConcurrentDictionary.GetOrAdd führt immer die Delegate-Methode aus
- 18. Führt SHA256 Round Trip aus
- 19. Ausführen einer ajax-Komponente http: //path/to/my/component.cfc? Method = etwas führt die Methode nicht aus
- 20. Führt P/Invoke die DLL ausführen und dann herunterfahren?
- 21. nach vorzeitige Rückkehr führt nächsten Code ausführen
- 22. In Java, wie führt die GUI Code auf Aktionsereignis aus?
- 23. Führt orderby() in LINQ die Vergleichsfunktion nur einmal aus oder führt sie bei Bedarf aus?
- 24. Jquery führt die erste Zeile des Codes aus, führt aber den Rest nicht aus.
- 25. Makefile führt die Befehle nicht wie erwartet aus
- 26. Erzeugt das Erstellen separater Funktionen anstelle einer großen langsamen Verarbeitungszeit?
- 27. JQuery, das $ .get verwendet, führt keine Erfolgsaktionen aus
- 28. Führt AppDomains in eigenen Threads aus?
- 29. Cronjob führt kein Skript aus, das einwandfrei funktioniert.
- 30. Separater CodeIgniter Öffentlicher Ordner
Sie helfen mir sicher heute viel. Vielen Dank! – whatWhat
Sie sind herzlich willkommen! –
Eine "Plain Old Unix Pipeline" von Python-Anwendungen ist oft ein besseres Design als mehrere Threads. Eine Pipeline von Prozessen vermeidet alle GIL-Probleme. Es vermeidet auch mögliche Thread-Sicherheitsprobleme in einer Bibliothek, die Sie gerade verwenden. Es ist einfach, mit der Shell zu erstellen. Das Betriebssystem handhabt die Synchronisation für Sie - Sie lesen gerade von sys.stdin und schreiben in sys.stdout. –