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

时间:2019-03-14 22:06:05

标签: python gunicorn

我正试图用一个工人用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

我读了几个问题,但是所有人都说要减少超时时间,而这已经减少了。我不明白为什么它不起作用。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于基础C数据类型(INT),该值太大。粗俗的--timeout标志以秒为单位接受该值,通常来说,如果您必须让一个工人存活这么长的时间(〜116天),您可能在做错事。工作人员应在合理的时间后暂停连接以释放资源。如果您有一些计算密集型端点需要花费一些时间,则您仍应很好地估计该端点通常需要多长时间,并相应地调整您的gunicorn --timeout参数。需要花费比标准HTTP请求/响应周期更长的时间的事物应移至任务队列,例如Redis或RabbitMQ。您没有提供有关Flask应用程序的确切功能的大量信息,因此我的发言非常笼统。话虽如此,您可以省去--timeout标志。我认为同步工作者的默认设置是30秒,这对于典型的Web应用来说是非常合理的