Я работаю на многоядерной машине Linux, на которой я просто вызываю один и тот же сценарий Python с помощью интерпретатора в командной строке (на самом деле просто «python script.py») несколько раз одновременно. Я вижу, что производительность намного ниже, чем при однократном вызове, хотя у меня достаточно машинных ресурсов. Я считаю, что это связано с тем, что экземпляры используют интерпретатор через Global Interpreter Lock (GIL), то есть несколько экземпляров в конечном итоге работают «на одном ядре», несмотря ни на что. Если я сделаю то же самое с замороженной двоичной версией скрипта Python (http://wiki.python.org/moin/Freeze), это тоже случится? Полагаю, что нет, потому что двоичный файл «имеет собственный интерпретатор»?
Будет ли замороженный двоичный файл Python обращаться к локальному интерпретатору и глобальной блокировке интерпретатора (GIL)?
comment
GIL разделяется между потоками в одном процессе Python. Это не применимо, если вы запускаете несколько экземпляров скрипта. Значит, ваша проблема связана с чем-то другим, кроме GIL.
- person Michael Mior   schedule 13.04.2013
Ответы (1)
Ваша вера ошибочна. GIL является глобальным процессом. Отдельные процессы CPython ничего не разделяют, даже GIL. Только потоки в одном процессе соревнуются за одну и ту же глобальную блокировку. Снижение производительности, которое вы наблюдаете, имеет другую причину. И да, правила такие же для замороженных исполняемых файлов IIUC.
person
Community
schedule
13.04.2013
Что ж, в этом есть смысл. В конце концов, сам CPython - всего лишь еще одно приложение. Спасибо за ответ.
- person Andre Martins; 13.04.2013