Приложение Flask зависает при обработке запроса

у меня есть простое приложение для колбы, одна страница, загрузка html, а затем некоторая обработка на нем на посту; по запросу POST; я использую beautifulsoup, pandas, и обычно для выполнения задачи требуется 5-10 сек.

В конце я экспортирую результирующий фрейм данных в excel с пандами (с обновлением предыдущего сохраненного excel, если он присутствует). и по запросу GET я возвращаю результат этого фрейма данных.

Теперь вопрос... приложение дает никакого ответа, в то время как те 5-10 сек.; даже если я посетите мое приложение с другого компьютера, он будет показывать после завершения этих 5-10 сек. Это означает, что если какой-либо пользователь этого приложения загрузил свой файл; затем остальные должны ждать, пока его работа не завершится.

Я даже добавил ниже упомянутый код в моем приложении; но никакого улучшения.

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop

if __name__ == '__main__':
    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(5657)
    IOLoop.instance().start()

также моя система и версия python, как показано ниже.. .

>>> sys.version
'2.7.5 |Anaconda 1.8.0 (32-bit)| (default, Jul  1 2013, 12:41:55) [MSC v.1500 32 bit (Intel)]'

примечание: Я хочу переместить его в python3.3, и хотел остаться на моей машине windows 7!!

2 ответов


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

удалите Торнадо и попробуйте использовать многопоточную опцию Flask:

app.run(threaded=True)

Если вы используете функцию run_simple WSGI, просто добавьте threaded=true param.

пример:

run_simple('0.0.0.0', 9370, application, use_reloader=True, use_debugger=True, threaded=True)