Я работаю над многоядерной машиной Linux, на которой я просто вызываю один и тот же сценарий Python с интерпретатором в командной строке (на самом деле просто «python script.py») несколько раз одновременно. Я вижу, что производительность намного медленнее, чем для одного вызова, хотя я хорошо себя чувствую в машинных ресурсах. Я полагаю, что это связано с тем, что экземпляры совместно используют интерпретатор через Global Interpreter Lock (GIL) - то есть несколько экземпляров заканчивают запуск «одного ядра» независимо от того, что. Если я сделаю то же самое с замороженной бинарной версией Python скрипта (http://wiki.python.org/moin/Freeze), это тоже произойдет? Я не верю, потому что бинарный «носит собственный интерпретатор»?Может ли замороженный двоичный файл Python получить доступ к локальному интерпретатору и Global Interpreter Lock (GIL)?
0
A
ответ
3
Ваша вера в неправильность. GIL является глобальным процессом. Отдельные процессы CPython не имеют ничего общего, даже GIL. Только потоки в рамках одного процесса конкурируют за один и тот же глобальный замок. У ухудшения производительности, которое вы видите, есть другая причина. И да, правила одинаковы для замороженных исполняемых файлов IIUC.
+0
Ну, это имеет смысл. В конце концов, CPython сам по себе является еще одним приложением. Спасибо за ответ. –
GIL разделяется между потоками в одном процессе Python. Это не применяется, если вы запускаете несколько экземпляров сценария. Так что что-то другое, кроме GIL, вызывает вашу проблему. –