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