Подтвердить что ты не робот

Колба медленно замедляется при получении данных из запроса?

Я пишу фляжное приложение, которое принимает запросы POST с данными json. Я заметил огромные различия в времени ответа, основанные на размере данных, передаваемых в приложение. После отладки я сузил проблему до строки, где я извлекал json-данные из объекта запроса. Важно отметить, что тестирование проводилось на сервере разработки фляг.

start = time.time()
resp = json.dumps(request.json)
return str(time.time() - start)

Я приурочил эту строку и для данных 1024 (вероятно, не совпадение), и меньше символов это заняло 0.002s и для чего-либо более 1024 за 1 секунду! Что здесь происходит? Это ограничение сервера разработки?

EDIT: То же самое происходит для получения данных POST через request.form.get( "somedata" ) с длиной содержимого более 1024

EDIT: Я не мог реплицировать проблему в том же примере, который был использован Apache

EDIT: Я начал копаться в модуле Werkzeug и обнаружил, что медлительность возникает при чтении ответного сообщения self._read(to_read) в модуле wsgi.py, который передается из BaseHTTPRequestHandler. Все еще не знаю, почему так медленно.


Здесь детали окружающей среды: Ubuntu - 10.04 Python - 2.6.5 Колба - 0,9 Werkzeug - 0.8.3

4b9b3361

Ответ 1

Ожидается, что сервер разработки колб будет медленным. Из http://flask.pocoo.org/docs/deploying/:

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

Как отметил Маркус в комментариях, другой сервер WSGI, такой как gunicorn или торнадо, будет намного быстрее и надежнее, поэтому определенно используйте один из них для развертывания и бенчмаркинга.

Если вы беспокоитесь о быстрой работе во время разработки, вы можете использовать gunicorn в разработке так же, как и при развертывании. Например, если вы используете для геройки, вы можете запустить "стартер стартера", и сервер пулеметов начнется прямо.

Ответ 2

У меня была эта проблема на такой линии, она занимала около 1,0 секунды! Это в обработчике почтового ящика:

username=request.form.get('username')

Я тестировал его с помощью curl -F:

curl -F username="x" http://127.0.0.1:5000/func

Я только что изменил -F на -d и получил 0.0004 секунды!!!

curl -d username="x" http://127.0.0.1:5000/func

Я думаю, что в колбе есть проблема с получением типа содержимого "multipart/form-data".