Nie jestem pewien, dlaczego istnieje API podinterpretacji i dlaczego jest on używany w modułach takich jak moduł mod_wsgi. Czy jest używany głównie do tworzenia obszaru izolowanego zabezpieczeń dla różnych aplikacji działających w tym samym procesie, czy też jest sposobem na współbieżność z wieloma wątkami? Może obydwa? Czy są inne cele?Jaki jest cel API interpretera w CPython?
15
A
Odpowiedz
14
Wyobrażam sobie, że celem jest stworzenie oddzielnych środowisk wykonawczych Pythona. Na przykład: mod_wsgi (moduł Apache Python) hostuje jednego interpretera pythonów, a następnie hostuje wiele aplikacji w podprocesorze (w domyślnej konfiguracji).
Niektóre kluczowe punkty z documentation:
- To jest (prawie) całkowicie oddzielne środowisko do wykonywania kodu Pythona. W szczególności nowy interpreter ma oddzielne, niezależne wersje wszystkich importowanych modułów, w tym podstawowe moduły:
__builtin__
, ,isys
. - Tabela załadowanych modułów (sys.modules) i ścieżka wyszukiwania modułów (sys.path) są również oddzielne.
- Ponieważ podprocesory (i główny interpreter) są częścią tego samego procesu, izolacja między nimi nie jest idealna - na przykład za pomocą operacji na plikach o niskim poziomie, takich jak os.close() mogą (przypadkowo lub złośliwie) wpływają na otwarte pliki nawzajem.
- Z powodu sposobu, w jaki rozszerzenia są dzielone między (pod) interpretatory, niektóre rozszerzenia mogą nie działać poprawnie; jest to szczególnie prawdopodobne, gdy rozszerzenie korzysta ze (statycznych) zmiennych globalnych lub gdy rozszerzenie manipuluje słownikiem swojego modułu po jego inicjalizacji.
0
Jak rozumieć to ostatnie, pomysł był aby móc wykonać wiele aplikacji, jak również wiele kopii tej samej aplikacji ramach tego samego procesu.
Jest to funkcja w innych językach skryptowych (np TCL) i jest szczególnie użyteczna dla gui budowniczych, serwery WWW, itp
Łamie w Pythonie ponieważ wiele rozszerzeń nie są bezpieczne wielokrotnego tłumacza, więc jedno działanie tłumacza może wpłynąć na zmienne w innym tłumaczu.
Czy to oznacza, że różni tłumacze mogą pracować jednocześnie w różnych wątkach? Nadal nie jestem pewien, czy różni tłumacze w tym samym procesie mają ten sam GIL. –
GIL jest obiektem globalnym dla tego procesu i jest dzielony między podinterpretatorami. Więc nie, nie mogą biegać jednocześnie. http://objectmix.com/python/377035-multiple-independent-python-interpreters-c-c-program.html – codeape
Dzięki za link! Próbowałem dowiedzieć się, czy jest jakiś sposób obejścia ograniczeń Pythona i GIL, i nie wymyślę niczego. –