gpt4 book ai didi

python - 为什么当我按下 ctrl-c 时 Tornado 会花这么长时间才能死掉?

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:44 27 4
gpt4 key购买 nike

在开发 Tornado 应用程序时,我经常想重新启动服务器以获取新的更改。我按下 ctrl-c 来停止服务器,但是对于 Tornado,这似乎非常慢。它在关闭之前等待很多秒,或者在发出 ctrl-c 时根本不关闭。

奇怪的是,如果在单击 ctrl-c 后,我向服务器发出新请求(例如,通过刷新指向服务器的浏览器),它会立即关闭。

有人知道如何解释或解决这个问题吗?有没有人经历过类似的事情?

(注意,这是在 Windows 上。)

最佳答案

在 Python 中,信号总是由主线程处理。如果 IOLoop 从主线程运行,它会在服务器空闲并等待 IO 时阻塞它。结果,所有信号都将等待线程唤醒。这解释了为什么发送请求会关闭服务器。

更新:您可以尝试这样的操作:

def set_ping(ioloop, timeout):
ioloop.add_timeout(timeout, lambda: set_ping(ioloop, timeout))

然后:

ioloop = tornado.ioloop.IOLoop.instance()
set_ping(ioloop, timedelta(seconds=2))
ioloop.start()

当你开始循环时。因此,select 将在 2.0 秒超时后被调用,从而防止阻塞。 (另请参阅 IOLoop Timeouts)

(注意:我无法在 Linux 上重现您的情况,即使我手动设置要使用的 select,所以我不能 100% 保证这会有所帮助,但听起来似乎有道理)

关于python - 为什么当我按下 ctrl-c 时 Tornado 会花这么长时间才能死掉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9578245/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com