Non sono chiaro il motivo per cui l'API sub-interpreter esiste e perché viene utilizzata in moduli come il modulo apache mod_wsgi. Viene utilizzato principalmente per la creazione di una sandbox di sicurezza per diverse applicazioni in esecuzione all'interno dello stesso processo o è un modo per consentire la concorrenza con più thread? Forse entrambi? Ci sono altri scopi?Qual è lo scopo dell'API sub-interpreter in CPython?
risposta
Immagino che lo scopo sia creare ambienti di esecuzione Python separati. Ad esempio, mod_wsgi (modulo Apache Python) ospita un singolo interprete python e quindi ospita più applicazioni all'interno di interpreti secondari (nella configurazione predefinita).
Alcuni punti chiave del documentation:
- questo è un (quasi) ambiente totalmente separato per l'esecuzione di codice Python. In particolare, il nuovo interprete dispone di versioni separate e indipendenti di tutti i moduli importati, compresi i moduli fondamentali
__builtin__
,__main__
esys
. - Anche la tabella dei moduli caricati (sys.modules) e il percorso di ricerca del modulo (sys.path) sono separati.
- Poiché i subinterpretatori (e l'interprete principale) fanno parte dello stesso processo, l'isolamento tra di essi non è perfetto, ad esempio utilizzando operazioni di file di basso livello come os.close() che possono (accidentalmente o intenzionalmente) si influenzano reciprocamente sui file aperti.
- A causa del modo in cui le estensioni sono condivise tra (sotto-) interpreti, alcune estensioni potrebbero non funzionare correttamente; questo è particolarmente probabile quando l'estensione fa uso di variabili globali (statiche) o quando l'estensione manipola il dizionario del modulo dopo l'inizializzazione.
Come ho capito ultimo, l'idea doveva essere in grado di eseguire più applicazioni così come copie multiple della stessa applicazione all'interno dello stesso processo.
Questa è una funzionalità presente in altri linguaggi di scripting (ad esempio TCL), ed è di particolare utilità per i costruttori di GUI, server web, ecc
Si rompe in python, perché molte estensioni non sono sicuri multiple-interprete, quindi le azioni di un interprete potrebbero influenzare le variabili in un altro interprete.
- 1. Qual è lo scopo di. * \\?
- 2. Qual è lo scopo di :: in C#?
- 3. Qual è lo scopo di $ in XSLT
- 4. Qual è lo scopo di 'var'?
- 5. Qual è lo scopo di HTML?
- 6. Qual è lo scopo di @EnableTransactionManagement?
- 7. Qual è lo scopo del prototipo?
- 8. Qual è lo scopo della lente unita?
- 9. Qual è lo scopo dell'interfaccia marcatore?
- 10. Qual è lo scopo di riutilizzareIdentificatore?
- 11. Qual è lo scopo di EXTRA_CFLAGS?
- 12. Qual è lo scopo di XACT_ABORT
- 13. Qual è lo scopo degli oggetti # requireNonNull
- 14. Qual è lo scopo dei record attivi?
- 15. Qual è lo scopo di "() =>"
- 16. Qual è lo scopo di Rake?
- 17. Qual è lo scopo dei file pdb?
- 18. Qual è lo scopo di HttpHeaders.TryAddWithoutValidation?
- 19. Qual è lo scopo di Microsoft.Net.Compilers?
- 20. php umask (0) qual è lo scopo
- 21. Qual è lo scopo del file vshost.exe?
- 22. Qual è lo scopo di angular-sanitize?
- 23. Qual è lo scopo delle classi astratte?
- 24. Database Pivoting: qual è lo scopo?
- 25. Scala: qual è lo scopo dell'override
- 26. Qual è lo scopo dell'intestazione features.h?
- 27. Qual è lo scopo dell'hack * CSS?
- 28. Qual è lo scopo dei file .edmx?
- 29. Qual è lo scopo dell'uso di CommandType.Tabledirect
- 30. Qual è lo scopo dei tipi anonimi?
Ciò significa che diversi interpreti possono essere eseguiti contemporaneamente in thread diversi? Non sono ancora chiaro se diversi interpreti nello stesso processo condividano o meno lo stesso GIL. –
GIL è un oggetto globale per il processo ed è condiviso tra i subinterpreti. Quindi no, non possono essere eseguiti contemporaneamente. http://objectmix.com/python/377035-multiple-independent-python-interpreters-c-c-program.html – codeape
Grazie per il link! Ho cercato di capire se c'è un modo per aggirare i limiti di threading di Python e GIL, e non mi viene in mente nulla. –