繁体   English   中英

当我点击ctrl-c时,为什么龙卷风需要这么长时间才能死?

[英]Why does Tornado take so long to die when I hit ctrl-c?

在开发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()

当你开始循环。 因此,将使用2.0秒超时调用select ,以防止阻塞。 (另请参阅IOLoop超时

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

我不知道为什么用Ctrl+C退出需要这么长时间,但在某些情况下我按下Ctrl+\\ (Linux终端)

add_timeout工作; 如果你想节省重新注册超时,你可以这样做:

ili=tornado.ioloop.IOLoop.instance()
tornado.ioloop.PeriodicCallback(lambda: None,500,ili).start()
ili.start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM