Python 使用Gunicorn和Gevent运行Flask时,如何使用请求发出非阻塞请求
我的烧瓶申请会收到一个请求,做一些处理,处理时间很长。使用Gevent运行Gunicorn将允许它同时处理许多这样缓慢的请求。我知道当我的应用程序处理这个请求时,它也可以处理其他请求,但我的目的是,在这个请求中,它可以快速响应客户端,并且仍然在后台处理图像下载 如何修改下面的示例,使视图不被阻塞Python 使用Gunicorn和Gevent运行Flask时,如何使用请求发出非阻塞请求,python,flask,block,gunicorn,gevent,Python,Flask,Block,Gunicorn,Gevent,我的烧瓶申请会收到一个请求,做一些处理,处理时间很长。使用Gevent运行Gunicorn将允许它同时处理许多这样缓慢的请求。我知道当我的应用程序处理这个请求时,它也可以处理其他请求,但我的目的是,在这个请求中,它可以快速响应客户端,并且仍然在后台处理图像下载 如何修改下面的示例,使视图不被阻塞 @app.route('/do', methods = ['POST']) def do(): # here download many picture, it will tasks long
@app.route('/do', methods = ['POST'])
def do():
# here download many picture, it will tasks long time, and block。
return 'ok'
Flask+gevent不是用于此的合适工具。Gevent使用monkey补丁在事件循环上运行常规代码——但在此过程中,您无法运行常规事件循环(如调度异步任务)。我不是gevent专家(所以可能有一种技术我不知道),但我不这么认为 为了实现这一点,我将做两件事中的一件
有一个不太好的解决方案,使用线程或多处理来开始您的工作,而不需要任何监控来进行清理。最后,uwsgi内置了一些用于后台任务的东西,尽管我还没有尝试过。非常感谢您的回答。我觉得用芹菜有点笨重,就像下载10多张图片一样。使用芹菜需要启动一个单独的服务和额外的维护。我刚刚了解了Sanic框架,它是一个很好的框架,但我现在已经在Flask中编写了很多业务代码,似乎我现在处于进退两难的境地,如果业务逻辑还不是异步的,无论如何,你都无法从gevent中获得最大的好处:)如果你的应用程序必须扩展到多个实例,那就咬紧牙关,运行Redis服务器并添加芹菜。我保证这比你为了避免它而跳出的圈圈要少。