Python — интерактивный режим против обычного вызова интерпретатора

#python #interpreted-language #interactive-mode

#python #интерпретируемый язык #интерактивный режим

Вопрос:

Есть ли разница между двумя режимами с точки зрения ресурсов, особенно памяти? Я имею в виду Python в названии, но если есть общее объяснение для многих интерпретируемых языков (Octave и т. Д.), Это было бы очень полезно.

Спасибо

Комментарии:

1. Я не уверен, при каких возможных обстоятельствах вы хотели бы использовать интерактивный режим для чего-либо, если бы ресурсы были критическими?

2. Ну, я не думаю, что на этот вопрос есть полезный ответ. Если вы сможете придумать вариант использования, тогда можно было бы фактически протестировать использование ресурсов двух в одной и той же ситуации.

Ответ №1:

Похоже, что интерактивный процесс использует несколько больше памяти: сравните

 malkovich@malkovich:/etc$
malkovich@malkovich:/etc$ python -c 'import time; time.sleep(20000)' amp;
[1] 3559
malkovich@malkovich:/etc$ pidstat -r -p $!
Linux 2.6... (malkovich)        11-10-01        _x86_64_        (4 CPU)

08:11:41 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
08:11:41 PM      3559      0.00      0.00   27872   4412   0.12  python
malkovich@malkovich:/etc$ kill %1
malkovich@malkovich:/etc$
[1]   Terminated              python -c 'import time; time.sleep(20000)'
  

с

 malkovich@malkovich:/etc$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> time.sleep(20000)
^Z
[1]   Stopped                 python
malkovich@malkovich:/etc$ jobs -p
3881
malkovich@malkovich:/etc$ pidstat -r -p 3881
Linux 2.6... (malkovich)        11-10-01        _x86_64_        (4 CPU)

08:16:10 PM       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
08:16:10 PM      3881      0.00      0.00   34856   5072   0.14  python
  

Интересным является значение RSS (использование резидентной памяти): примерно на 650 КБ больше для интерактивного процесса.

Я бы ожидал, что это значение (разница) несколько увеличится, но не значительно, при использовании, только из-за истории команд и других тонкостей, предоставляемых в интерактивном сеансе. Я не думаю, что это когда-либо будет существенной разницей, но вы можете захотеть выполнить аналогичные тесты для вашей конкретной ситуации. Чтобы запустить фоновый сеанс интерпретации, вы буквально нажимаете ^Z (CTRL-Z).

Но в целом, я не думаю, что разница будет существенной, если вы не работаете во встроенной системе с несколькими МБ оперативной памяти.

Обратите внимание, что если вы напишете свой код как модуль, а затем импортируете его, он будет скомпилирован в байт-код и сохранен. Я полагаю, это уменьшит потребление памяти, а также уменьшит время запуска при последующих вызовах. Возможно, вам захочется выполнить несколько тестов, чтобы получить представление о разнице.