Gunicorn Worker 超时时间戳太大,无法转换为 C _PyTime_t

Gunicorn Worker timeout timestamp too large to convert to C _PyTime_t

我正在尝试使用 gunicorn 和一名工人一起启动我的烧瓶应用程序,但是 returns 这个错误

OverflowError: timestamp too large to convert to C _PyTime_t

这是我用来发射 gunicorn 的命令

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 request/response 周期花费更长的时间的事情应该移动到任务队列,例如 Redis 或 RabbitMQ。您没有提供太多关于您的 Flask 应用程序究竟在做什么的信息,所以我说的是非常笼统的术语。话虽这么说,您可以省略 --timeout 标志。我认为同步工作者的默认值是 30 秒,这对于典型的网络应用程序来说是非常合理的