量化交易系统使用的是flask + gunicorn + nginx方式部署,由于项目里面有大量的长时间执行任务,跑了一段时间,大概几天到一周多的时间吧,就会出现请求服务长时间不返回数据,有时候又能返回数据,后面查看gunicorn官方文档,有这么一段话: If you want to be able to handle streaming request/responses or other fancy features like Comet, Long polling, or Web sockets, you need to turn off the proxy buffering. When you do this you must run with one of the async worker classes.翻译过来就是:如果您希望能够处理流请求/响应或其他花哨的功能,如 Comet、长轮询或 Web 套接字,您需要关闭代理缓冲。执行此操作时,您必须使用异步工作器类之一运行。
后面又得知gunicorn默认的是aync同步的方式,所以当我的异步任务在执行的时候,有可能会占用资源,导致拥堵,这也就解释了为什么有时候能请求到数据,有时候请求不到数据,因此在gunicorn.py配置文件里面加上以下即可。
# 使用gevent模式
worker_class = 'gevent'
总结:遇到请求接口有时能返回数据,有时不能返回时,需要做好日志,查看是服务原因还是代码原因,还是服务器的原因,多去官方文档找答案。