我已经使用 Bottle 很长时间了,以前从未遇到过这种情况,但最近我开始了一个新项目,遇到了一些奇怪的行为,我根本无法追踪。
如果我在脚本中启动一个 Bottle 实例,并向该脚本发送一个 SIGTERM,它会立即正常关闭。但是,如果我发出一个 http 请求,任何将来发送的 SIGTERM 都会显示在屏幕上
[INFO] Handling signal: term
但脚本不会关闭。
起初我确信这是我的错误,我没有正确退出我的请求,但事实证明,即使是 404 请求或 405 也会触发相同的行为。
import bottle
bottle.run(host = '0.0.0.0', port = 9000, server = 'gunicorn')
如果我运行这个,然后发送SIGTERM,没问题,脚本存在。如果我请求一个页面并得到 404,就是这样,除了显示收到信号的消息之外,不再对 SIGTERM 做出任何响应,但此后它不会关闭。
主机和端口没有任何区别。添加成功的请求也不会。唯一触发该行为的似乎是
server = 'gunicorn'
线。如果我删除它,那么脚本将按预期运行。
我不断删除越来越多的代码,试图理解问题所在,直到我得到上面的结果,这就是所需要的一切。问题一定是在瓶子和gunicorn之间。
瓶子是0.12.25 古尼康是 21.2.0 python 是 3.10.12
Whelp,我一点也不明白,但看起来这个问题与 python、bottle 或 Gunicorn 无关。我一直在使用 Chrome 进行测试,所以我一时兴起尝试在 Firefox 中发出请求,没有任何挂起。我无法解释它,但 Chrome 似乎没有关闭连接,即使它收到了所有内容并显示了输出。