我试图用一个工人使用gunicorn开始我的烧瓶应用程序,但它返回此错误
OverflowError: timestamp too large to convert to C _PyTime_t
这是我用来发射炮弹的命令
gunicorn app:app -b 0.0.0.0:7004 \
--name $APP_NAME \
--workers 1\
--timeout 9999999 \
这是堆栈跟踪,
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/lib/python3.6/site-packages/gunicorn/workers/base.py", line 134, in init_process
self.run()
File "/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 124, in run
self.run_for_one(timeout)
File "/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 83, in run_for_one
self.wait(timeout)
File "/usr/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 35, in wait
ret = select.select(self.wait_fds, [], [], timeout)
OverflowError: timestamp too large to convert to C _PyTime_t
我读了几个问题但是所有人都说要减少我已经减少的超时。我不知道为什么它不起作用。
谢谢!
该值对于底层C数据类型(INT
)来说太大了。 gunicorn --timeout
旗帜以秒为单位接受价值,一般来说,如果你必须让工人活着这么长时间(~116天)你可能做错了什么。工作人员应在合理的时间后暂停连接以释放资源。如果你有一些需要一段时间的计算重型端点,你应该仍然可以很好地估计端点通常需要多长时间并相应地调整你的gunicorn --timeout
参数。花费比标准HTTP请求/响应周期更长的事情应该移动到任务队列,例如Redis或RabbitMQ。你没有提供很多关于你的Flask应用程序究竟在做什么的信息,所以我用非常笼统的话说。话虽这么说,你可以放弃--timeout
旗帜。我认为同步工作者的默认值是30秒,这对于典型的Web应用程序来说非常合理