Веб-хостинг Python: Почему перезапуски сервера необходимы?

Ross имеет верное представление для РЕГИСТРАЦИИ обычного формата параметра/значения к URL.

я недавно столкнулся с ситуацией, где мне был нужен к POST некоторый XML как Тип контента "text/xml" без любых пар параметра, таким образом, вот то, как Вы делаете это:

$xml = 'foobar';
$httpRequest = curl_init();

curl_setopt($httpRequest, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($httpRequest, CURLOPT_HTTPHEADER, array("Content-Type:  text/xml"));
curl_setopt($httpRequest, CURLOPT_POST, 1);
curl_setopt($httpRequest, CURLOPT_HEADER, 1);

curl_setopt($httpRequest, CURLOPT_URL, $url);
curl_setopt($httpRequest, CURLOPT_POSTFIELDS, $xml);

$returnHeader = curl_exec($httpRequest);
curl_close($httpRequest);

В моем случае, я должен был проанализировать некоторые значения из заголовка ответа HTTP, таким образом, Вы, возможно, обязательно не должны устанавливать CURLOPT_RETURNTRANSFER или CURLOPT_HEADER.

6
задан Leon 11 November 2009 в 00:54
поделиться

3 ответа

Python - это компилируемый язык; скомпилированный байт-код кэшируется процессом Python для последующего использования для повышения производительности. PHP по умолчанию интерпретируется. Это компромисс между удобством использования и скоростью.

Если вы используете стандартный модуль WSGI, такой как Apache mod_wsgi , то вам не нужно перезапускать сервер - просто коснитесь .wsgi , и код будет перезагружен. Если вы используете какой-то странный сервер, который не поддерживает WSGI, вы в некотором роде пользуетесь своим удобством.

7
ответ дан 8 December 2019 в 17:23
поделиться

Зависит от того, как вы развертываете приложение Python. Если это чистый сценарий Python CGI, перезапуск не требуется (хотя это не рекомендуется, потому что это будет очень медленно). Если вы используете modwsgi в Apache, существуют допустимые способы перезагрузки исходного кода . По-видимому, modpython имеет некоторую поддержку и сопутствующие проблемы для перезагрузки модуля.

Существуют другие способы, кроме Apache, для размещения приложения Python, включая сервер CherryPy, сервер вставки, Zope, Twisted и Tornado.

Однако, если у вас нет особой причины не использовать его (поскольку вы предположительно пришли из магазина Apache / PHP), я бы настоятельно рекомендовал mod_wsgi на Apache. Я знаю, что Django рекомендует modwsgi для Apache, и большинство других основных фреймворков Python будут работать с modwsgi.

4
ответ дан 8 December 2019 в 17:23
поделиться

Так ли это на самом деле?

Это зависит от обстоятельств. Перезагрузка кода очень специфична для хостинга. Большинство серверов предоставляют способ автоматической перезагрузки самого сценария WSGI, но здесь нет стандартизации; действительно, вопрос о том, как объект WSGI Application связан с веб-сервером, сильно различается в разных средах размещения. (Вы можете создать один файл сценария, который будет работать как клей развертывания для CGI, mod_wsgi, пассажира и ISAPI_WSGI, но это не совсем тривиально.)

Однако Python действительно борется с перезагрузкой модуля. Это проблематично для приложений WSGI, потому что любое нетривиальное веб-приложение будет инкапсулировать свои функции в модули и пакеты, а не в простые автономные скрипты. Оказывается, перезарядить модули довольно сложно, потому что если вы reload () их один за другим, они могут легко получить плохие ссылки на старые версии. В идеале, можно было бы перезагрузить весь интерпретатор Python при обновлении любого файла, но на практике кажется, что некоторым расширениям C это не нравится, поэтому обычно это не делается.

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

В этом случае вам может потребоваться что-то вроде запуска mod_wsgi в режиме демона с группой приложений для каждой стороны и процесса. перезагрузите уровень и коснитесь файла сценария WSGI, когда вы обновите какой-либо из модулей.

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

3
ответ дан 8 December 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: