Какова цель API дополнительного интерпретатора в CPython? - PullRequest
17 голосов
/ 16 апреля 2009

Мне неясно, почему существует API дополнительного интерпретатора и почему он используется в таких модулях, как модуль apache mod_wsgi. Используется ли он в основном для создания изолированной программной среды безопасности для разных приложений, запущенных в одном и том же процессе, или это способ обеспечения параллелизма с несколькими потоками? Возможно оба? Есть ли другие цели?

Ответы [ 2 ]

14 голосов
/ 16 апреля 2009

Я предполагаю, что целью является создание отдельных сред выполнения Python. Например, mod_wsgi (модуль Apache Python) размещает одного интерпретатора Python, а затем размещает несколько приложений в суб-интерпретаторах (в конфигурации по умолчанию).

Некоторые ключевые моменты из документации :

  • Это (почти) совершенно отдельная среда для выполнения кода Python. В частности, новый интерпретатор имеет отдельные, независимые версии всех импортируемых модулей, включая основные модули __builtin__, __main__ и sys.
  • Таблица загруженных модулей (sys.modules) и путь поиска модулей (sys.path) также разделены.
  • Поскольку суб-интерпретаторы (и основной интерпретатор) являются частью одного и того же процесса, изоляция между ними не идеальна - например, при использовании низкоуровневых файловых операций, таких как os.close (), они могут (случайно или злонамеренно) ) влияют на открытые файлы друг друга.
  • Из-за того, что расширения используются совместно (под) интерпретаторами, некоторые расширения могут работать некорректно; это особенно вероятно, когда расширение использует (статические) глобальные переменные или когда расширение манипулирует словарем своего модуля после его инициализации.
0 голосов
/ 01 октября 2013

Как я понял в последний раз, идея состояла в том, чтобы иметь возможность выполнять несколько приложений, а также несколько копий одного и того же приложения в одном и том же процессе.

Эта функция имеется в других языках сценариев (например, TCL) и особенно полезна для разработчиков графического интерфейса, веб-серверов и т. Д.

В python он ломается, потому что многие расширения не безопасны для нескольких интерпретаторов, поэтому действия одного интерпретатора могут повлиять на переменные в другом интерпретаторе.

...