Gunicorn工作程序超时时间戳太大而无法转换为C _PyTime_t

问题描述 投票:0回答:1

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

我读了几个问题但是所有人都说要减少我已经减少的超时。我不知道为什么它不起作用。

谢谢!

python gunicorn
1个回答
1
投票

该值对于底层C数据类型(INT)来说太大了。 gunicorn --timeout旗帜以秒为单位接受价值,一般来说,如果你必须让工人活着这么长时间(~116天)你可能做错了什么。工作人员应在合理的时间后暂停连接以释放资源。如果你有一些需要一段时间的计算重型端点,你应该仍然可以很好地估计端点通常需要多长时间并相应地调整你的gunicorn --timeout参数。花费比标准HTTP请求/响应周期更长的事情应该移动到任务队列,例如Redis或RabbitMQ。你没有提供很多关于你的Flask应用程序究竟在做什么的信息,所以我用非常笼统的话说。话虽这么说,你可以放弃--timeout旗帜。我认为同步工作者的默认值是30秒,这对于典型的Web应用程序来说非常合理

© www.soinside.com 2019 - 2024. All rights reserved.