Один и тот же экземпляр интерпретатора Python, выполняющий несколько сценариев одновременно?
6-7 лет назад я увидел инициативу по запуску python на узких ресурсах env, запустив интерпретатор только один раз, одновременно позволяя нескольким сценариям использовать его одновременно.
Идея заключалась в том, чтобы сохранить накладные расходы при запуске интерпретатора и сэкономить оперативную память.
Существует ли что-то подобное?
этот вопрос Python: выполнение нескольких сценариев одновременно от одного и того же переводчика не решает проблему параллелизма. по крайней мере, ответы были о последовательном запуске, но мне нужно одновременно:)
идеи?
2 ответа
И да и нет. Сам Python использует глобальную блокировку интерпретатора (GIL), о которой вы можете прочитать много, если хотите. Короче говоря, это гарантирует, что интерпретатор в основном однопоточный. Вы можете создать (и запустить) более одного потока в вашей программе Python, но когда / если они используют интерпретатор Python, только один может сделать это одновременно. Однако, если у вас есть потоки, выполняющие в основном код из чего-то вроде SciPy или NumPy (который является нативным кодом, который не интерпретируется), то вы можете запустить несколько одновременно.
Однако большинство операционных систем имеют механизм копирования при записи для страниц памяти процесса, что означает, что (пока код не изменен) большая часть кода, используемого интерпретатором, будет передаваться без дополнительной работы с вашей стороны (или переводчик) вообще. IOW, когда вы запускаете две или более копии интерпретатора, вторая и последующие будут совместно использовать большую часть памяти (по крайней мере для исполняемого кода) с первой, так что использование ресурсов не будет расти (где-либо близко) линейно, когда вы выполняете больше экземпляров. Время запуска также будет существенно сокращено - ОС должна создать новую таблицу страниц, отображающую страницы памяти в новом процессе, но не должна перечитывать эти страницы с диска или чего-либо подобного.
Python поддерживает многопоточность через thread
а также threading
модули (один низкоуровневый, другой высокоуровневый).