Будет ли замороженный двоичный файл Python обращаться к локальному интерпретатору и глобальной блокировке интерпретатора (GIL)?

Я работаю на многоядерной машине Linux, на которой я просто вызываю один и тот же сценарий Python с помощью интерпретатора в командной строке (на самом деле просто «python script.py») несколько раз одновременно. Я вижу, что производительность намного ниже, чем при однократном вызове, хотя у меня достаточно машинных ресурсов. Я считаю, что это связано с тем, что экземпляры используют интерпретатор через Global Interpreter Lock (GIL), то есть несколько экземпляров в конечном итоге работают «на одном ядре», несмотря ни на что. Если я сделаю то же самое с замороженной двоичной версией скрипта Python (http://wiki.python.org/moin/Freeze), это тоже случится? Полагаю, что нет, потому что двоичный файл «имеет собственный интерпретатор»?


person Andre Martins    schedule 13.04.2013    source источник
comment
GIL разделяется между потоками в одном процессе Python. Это не применимо, если вы запускаете несколько экземпляров скрипта. Значит, ваша проблема связана с чем-то другим, кроме GIL.   -  person Michael Mior    schedule 13.04.2013


Ответы (1)


Ваша вера ошибочна. GIL является глобальным процессом. Отдельные процессы CPython ничего не разделяют, даже GIL. Только потоки в одном процессе соревнуются за одну и ту же глобальную блокировку. Снижение производительности, которое вы наблюдаете, имеет другую причину. И да, правила такие же для замороженных исполняемых файлов IIUC.

person Community    schedule 13.04.2013
comment
Что ж, в этом есть смысл. В конце концов, сам CPython - всего лишь еще одно приложение. Спасибо за ответ. - person Andre Martins; 13.04.2013