![](/img/trans.png)
[英]When using Python subprocess, why does Ctrl-C not produce the same behavior as kill -2?
[英]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.