技術背景
針對長時間運行的Python程序,例如伺服器的後端或科學計算程序,需要特別注意。在進行某些操作時,例如使用Ctrl C結束正在運行的程序,我們可能需要提前中止。通常情況下,出現這種情況有兩種可能性:一種是程式出錯,需要停止程式以進行調整。另一種是程式本身是正確的,但是程式運行的速度太慢了,也有可能是想提前結束,這種場景下很多時候我們是希望可以保留其對應的計算結果的。但是如果我們使用的是一些第三方的數據存儲格式來存儲數據,不一定可以支援連續的存儲,非常常見的是在程式執行結束之後,再將結果進行保存。如果程序在中途被終止,需要採取特殊手段來保存它的結果。
基礎案例
我們先來看一個比較簡單的案例:一個普通的打印數字的程序,每隔1s的時間就打印一個數字出來,我們可以使用python的signal. signal來捕獲這個終止訊號。
# signal_exit.py import signal import sys def signal_handler(signal, frame): print ('\nSignal Catched! You have just type Ctrl+C!') sys.exit(0) if __name__ == '__main__': import time signal.signal(signal.SIGINT, signal_handler) for x in range(100): time.sleep(1) print (x)
當我們執行這個程式到一半時,同時按下Ctrl C,我們會得到如下的結果:
$ python3 signal_exit.py
#0
1
2
^C
Signal Catched! You have just type Ctrl C!
這個結果表明,我們在程式運行的過程中捕獲了Ctrl C的這個外部操作,並且對該操作進行了相應的處理之後,才終止了程序的運行。要注意的是,如果此時不加上sys.exit(0)這個終止的操作,這個程式不會被停止,會繼續運作下去,相當於只是捕獲了異常終止訊號但不做任何的處理。
給終止訊號傳入外部參數
在上面的一個案例中,僅僅只是捕獲了「終止運行」的這個外部訊號,但是如果更進一步的,我們想捕獲到最後一個輸出的數字是多少,這個時候要如何運作呢? signal.signal函數本身並不支援很多的參數傳入,此時建議採取的是自行創建一個類,將signal_handler函數封裝為類的成員函數,這樣我們就可以獲取到相應的內部參數,如下面這個案例所示:
# signal_exit.py import signal import sys import time class Printer: def __init__(self): self.x = 0 signal.signal(signal.SIGINT, self.signal_handler) def signal_handler(self, signal, frame): print ('\nSignal Catched! You have just type Ctrl+C! The last number is: {}'.format(self.x)) sys.exit(0) def run(self, counter=10): while self.x < counter: print (self.x) time.sleep(1) self.x += 1 if __name__ == '__main__': printer = Printer() printer.run(counter=100)
此時若在程式正在運作的狀態下同時按下Ctrl C,得到的結果如下:
$ python3 signal_exit.py
0
1
2
3
^C
Signal Catched! You have just type Ctrl C! The last number is: 3
可以看到,我們成功的捕獲到了最後一個被輸出出來的參數。
以上是Python3如何實現捕獲Ctrl+C終止訊號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

禪工作室 13.0.1
強大的PHP整合開發環境