Интерпретируется ли код при каждом вызове в Web2Py? - PullRequest
4 голосов
/ 06 сентября 2010

Если так, в чем преимущество? (уверен, что это позволит избежать перезапуска веб-сервера). Но разве это не узкое место производительности? Для производства возможно ли заставить web2py запускаться непосредственно из этапа интерпретации пропуска байт-кода (кэширование) (кроме первого запроса)?

Ответы [ 2 ]

5 голосов
/ 06 сентября 2010

В web2py по умолчанию весь код в моделях, представлениях и контроллерах (не код web2py, не код в модулях, импортируемых вашими моделями, представлениями, контроллерами) интерпретируется при каждом запросе. Это позволяет использовать сторонний веб-сервер (например, apache) и при этом иметь возможность видеть изменения в вашем коде, отраженные немедленно, без перезапуска. PHP работает так же. Потеря производительности незначительна, потому что время на анализ вашего кода меньше времени на выполнение вашего кода.

В любом случае, в интерфейсе администратора есть кнопка «компилировать», которая с помощью байт-кода компилирует ваш код и объединяет иерархию представления (расширенные и включенные представления) в один файл для каждого действия и снимает снижение производительности. Это также позволяет вам распространять ваш код, скомпилированный байт-код, не выдавая исходный код. Лицензия это позволяет.

2 голосов
/ 06 сентября 2010

Я не знаю web2py, но он работает через WSGI, как и большинство других сред Python. Это означает, что код интерпретируется только при запуске процесса и в противном случае хранится в памяти. Процессы динамически запускаются и завершаются самим веб-сервером, но обычно длятся несколько запросов.

В любом случае интерпретатор Python обычно создает файл байт-кода .pyc при первом чтении кода. Это работает в среде веб-сервера так же, как и везде.

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

...