我正在使用gunicorn和gthread工人运行flask应用程序-我使用gunicorn --config config/gunicorn.py api_intent:make_app()
启动应用程序,而我的config/gunicorn.py
文件看起来像:
bind = ['0.0.0.0:80']
worker_class = "gthread"
__all__ = ['bind']
我的flask端点之一进行复杂的数据库调用,需要几分钟才能执行。有时我会在客户端看到以下错误:Remote end closed connection without response
。但是,我还发现,如果我随后发出相同的调用,则该错误不会在客户端发生,并且我在服务器日志中发现昂贵的数据库调用花费的时间更少(尽管仍在几分钟左右),大概是因为端点关心的数据被拉到内存中。
我已经看过gunicorn docs,特别是timeout
选项,但是我很难理解更改异步工作人员超时的后果。我的理解是,借助gthread
,工作人员可以为某些主进程提供心跳信号,但我不清楚为什么该值的默认值为30秒只会有时导致服务器关闭与客户端的连接。难道是,如果单个DB调用需要30秒以上的执行时间,那么gthread工作程序将被视为已死?
如何正确指示Gunicorn等待更长时间才能关闭连接?我可以在每个端点上配置它吗?