簡體   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