Flask 应用在处理请求时挂起
我有一个简单的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)]'
注意:我想把它迁移到Python 3.3,并且希望继续使用我的Windows 7机器!!
2 个回答
1
如果你在使用WSGI的run_simple函数,只需要加上 threaded=true
这个参数就可以了。
示例:
run_simple('0.0.0.0', 9370, application, use_reloader=True, use_debugger=True, threaded=True)
15
Tornado 通常是一个单线程的网络服务器。如果你专门为 Tornado 的异步风格编写代码,你可以同时处理多个请求。但在你的情况下,你并没有这样做;你只是用 Tornado 来逐个处理 Flask 的请求。
可以考虑去掉 Tornado,试试 Flask 的多线程选项:
app.run(threaded=True)