Ich bin unklar, warum die Sub-Interpreter-API existiert und warum es in Modulen wie dem mod_wsgi Apache-Modul verwendet wird. Wird es hauptsächlich zum Erstellen einer Sicherheits-Sandbox für verschiedene Anwendungen verwendet, die innerhalb desselben Prozesses ausgeführt werden, oder ist es eine Möglichkeit, die gleichzeitige Verwendung mehrerer Threads zuzulassen? Vielleicht beide? Gibt es andere Zwecke?Was ist der Zweck der Sub-Interpreter-API in CPython?
Antwort
Ich stelle mir vor, der Zweck ist, separate Python-Ausführungsumgebungen zu erstellen. Zum Beispiel hostet mod_wsgi (Apache Python-Modul) einen einzelnen Python-Interpreter und hostet dann mehrere Anwendungen innerhalb von Subinterpretern (in der Standardkonfiguration).
Einige der wichtigsten Punkte aus den documentation:
- Dies ist eine (fast) völlig separate Umgebung für die Ausführung von Code Python. Insbesondere hat der neue Interpreter separate, unabhängige Versionen aller importierten Module, einschließlich der grundlegenden Module
__builtin__
,__main__
undsys
. - Die Tabelle der geladenen Module (sys.modules) und der Modul-Suchpfad (sys.path) sind ebenfalls getrennt.
- Da Sub-Interpreter (und der Hauptinterpreter) Teil desselben Prozesses sind, ist die Isolierung zwischen ihnen nicht perfekt - zum Beispiel können Low-Level-Dateioperationen wie os.close() (versehentlich oder böswillig) verwendet werden) beeinflussen die geöffneten Dateien des jeweils anderen.
- Aufgrund der Art und Weise, in der Erweiterungen zwischen (Sub-) Interpretern geteilt werden, funktionieren einige Erweiterungen möglicherweise nicht richtig. Dies ist besonders wahrscheinlich, wenn die Erweiterung (statische) globale Variablen verwendet oder wenn die Erweiterung das Wörterbuch des Moduls nach seiner Initialisierung manipuliert.
Wie ich es zuletzt verstanden, war die Idee, mehrere Anwendungen sowie mehrere Kopien derselben Anwendung innerhalb des gleichen Prozesses ausführen zu können.
Dies ist eine Funktion in anderen Skriptsprachen (zB TCL) gefunden und ist von besonderem Nutzen zu gui Builder, Web-Server, etc.
Es ist in Python bricht, weil viele Erweiterungen nicht multiple-Interpreter sicher sind, So können die Aktionen eines Interpreters die Variablen in einem anderen Interpreter beeinflussen.
- 1. Datenbankschwenkung - was ist der Zweck?
- 2. Was ist der Zweck von. * \\?
- 3. Was ist der Zweck der statischen hier?
- 4. Was ist der Zweck der Einheitslinse?
- 5. Was ist der Zweck der verschiedenen * Zieleigenschaften?
- 6. Was ist der Zweck der Winkel-Sanitize?
- 7. Was ist der Zweck der SQL-Sprache?
- 8. Was ist der Zweck der WCF-Sitzung?
- 9. Was ist der Zweck der `Pass` Aussage?
- 10. Was ist der Zweck der CRX-Datei?
- 11. Was ist der Zweck der Prozedur Verknüpfungstabelle?
- 12. Was ist der Zweck der Annotation @ ConditionalOnProperty?
- 13. Was ist der Zweck der WS-Adressierung?
- 14. Was ist der Zweck der Akka Erweiterung?
- 15. Was ist der Zweck der API React.addons.batchedUpdates?
- 16. Was ist der Zweck der `qt_noop`
- 17. Was ist der Zweck der Option -lrt?
- 18. Was ist der Zweck der WiederverwendungIdentifier?
- 19. Was ist der Zweck von :: in C#?
- 20. Was ist der Zweck von $ in XSLT
- 21. Was ist der Zweck von Membership.ValidateUser ist()
- 22. Was ist der Zweck der Verwendung der [^ Notation in scanf?
- 23. Was ist der Zweck von Capistrano Namespacing?
- 24. QTPLUGIN, was ist der Zweck davon?
- 25. Was ist der Zweck des Ember.Container
- 26. Was ist der Zweck von: nach?
- 27. Was ist der Zweck, doppelte Eigenschaftsnamen zuzulassen?
- 28. Was ist der Zweck von `__metaclass__ = type`?
- 29. Was ist der Zweck von: "Namespace verwenden"?
- 30. Was ist der Zweck von EXTRA_CFLAGS?
Bedeutet dies, dass verschiedene Interpreter gleichzeitig in verschiedenen Threads ausgeführt werden können? Ich bin immer noch unklar, ob verschiedene Dolmetscher im selben Prozess die gleiche GIL teilen. –
Die GIL ist ein globales Objekt für den Prozess und wird von den Sub-Interpretern geteilt. Also nein, sie können nicht gleichzeitig laufen. http://objectmix.com/python/377035-multiple-independent-python-interpreters-c-c-program.html – codeape
Danke für den Link! Ich habe versucht herauszufinden, ob die Threading-Beschränkungen von Python und der GIL umgangen sind, und ich habe nichts vor. –