1.报错还原
在使用gunicorn部署flask程序时常常会出现WORKER TIMEOUT报错,如下图,接着,挂掉的worker又自动重启。虽然进程(worker)挂掉后会自动重启,对于一些启动耗时较短的程序没有问题,但是对于深度学习模型等启动较慢的程序这就比较影响请求响应速度了。
2.解决办法
先直接说下解决办法,然后分析原因,直接将gunicorn的参数配置中的timeout参数设置大一点即可,超时参数设置格式为"-t 超时时间(单位是秒)",示例:gunicorn -w 2 -t 50 -b 0.0.0.0:8888 run:app
3.原因分析
首先解释一下timeout参数的作用,timeout是为了避免某一个客服端长期占用一个服务器中的worker(进程),当一个worker接收到一个客户端的请求后便开始计时,如果当前worker超过timeout时间还没有响应,那么程序会自动重启当前worker,防止一个进程被一直占用。所以在程序中有时会出现响应时间较长的请求而出现上述报错,即可将timeout参数设置大一点即可