簡體   English   中英

python 2.7 與 3.7 中的 SIGINT 信號處理程序行為差異

[英]SIGINT signal handler behaviour difference in python 2.7 vs 3.7

import signal

def handler(signum, frame):
    exit(0)

signal.signal(signal.SIGINT, handler)

str = 'abc'*1000000000
print(str)
print("done")

上面給出的代碼在使用 python3.7 運行時,在按下 ctrl+C 時立即停止,但是當使用 python2.7 運行時,需要多次按 ctrl+C 鍵。

如果這種行為有正當理由,請告訴我。

是的,這種行為是有正當理由的。 time.sleep的行為在 Python 2.7 和 Python 3.7 之間發生了變化。

來自Python 2.7 文檔

實際的暫停時間可能比請求的少,因為任何捕獲的信號都會在執行該信號的捕獲例程后終止sleep()

來自Python 3.7 文檔

在 3.5 版更改:即使睡眠被信號中斷,該函數現在也至少睡眠幾秒鍾,除非信號處理程序引發異常(有關基本原理,請參閱PEP 475 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM