Приложение 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)