Gunicorn 工人超时无论如何

19 投票
2 回答
18310 浏览
提问于 2025-04-18 18:53

我正在尝试通过gunicorn运行一个简单的flask应用,但无论我怎么做,工作进程总是超时。无论应用是否有活动,工作进程总是会在我设置的timeout值后超时。是什么导致它们超时的呢?当我发起请求时,都是成功的,但工作进程还是会超时。以下是我运行的内容:

gunicorn test_app.py -b 127.0.0.1:8000 --log-level=debug --log-file /tmp/log
 * Running on http://127.0.0.1:5000/
127.0.0.1 - - [28/Aug/2014 11:23:50] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [28/Aug/2014 11:23:53] "GET / HTTP/1.1" 200 -
 * Running on http://127.0.0.1:5000/
 * Running on http://127.0.0.1:5000/

这是我在/tmp/log中看到的内容:

[2014-08-28 11:23:32 -0700] [36868] [INFO] Listening at: http://127.0.0.1:8000 (36868)
[2014-08-28 11:23:32 -0700] [36868] [INFO] Using worker: sync
[2014-08-28 11:23:32 -0700] [36871] [INFO] Booting worker with pid: 36871
[2014-08-28 11:23:32 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:02 -0700] [36868] [CRITICAL] WORKER TIMEOUT (pid:36871)
[2014-08-28 11:24:02 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:03 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:03 -0700] [36872] [INFO] Booting worker with pid: 36872
[2014-08-28 11:24:03 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:03 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:33 -0700] [36868] [CRITICAL] WORKER TIMEOUT (pid:36872)
[2014-08-28 11:24:33 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:33 -0700] [36872] [INFO] Worker exiting (pid: 36872)
[2014-08-28 11:24:33 -0700] [36873] [INFO] Booting worker with pid: 36873
[2014-08-28 11:24:33 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:24:33 -0700] [36868] [DEBUG] 1 workers
[2014-08-28 11:25:03 -0700] [36868] [CRITICAL] WORKER TIMEOUT (pid:36873)

正如你所看到的,我的工作进程每30秒就超时一次,尽管它没有任何问题。这是怎么回事呢?

2 个回答

8

通常,如果请求花费的时间太长,就会出现工作超时的问题。你可以试着添加一个新的参数,叫做 --timeout <某个值>,这样应该就能解决这个问题。

例如: gunicorn test_app.py -b 127.0.0.1:8000 --log-level=debug --log-file /tmp/log -t 900

12

如果将来有人遇到这个问题,主要原因是我做了:

app.run()

而不是

if __name__ == '__main__':
    app.run()

因为前者会导致工作进程通过flask运行,而不是gunicorn,这样整个程序就会变得混乱。只要换成后者,就解决了我的问题。

撰写回答