首頁 >後端開發 >Python教學 >如何防止 Python 函數因逾時而無限期停止?

如何防止 Python 函數因逾時而無限期停止?

DDD
DDD原創
2024-12-24 00:55:09965瀏覽

How Can I Prevent Indefinitely Halting Python Functions with a Timeout?

函數呼叫超時

當在Python 中呼叫可能無限期停止腳本執行的函數時,有必要建立一種機制來防止它。解決方案在於設定一個超時閾值,超過該閾值後腳本將幹預並終止函數。

使用訊號包

對於基於 UNIX 的系統,訊號包提供了一個強大的解決方案。使用它:

  1. 導入訊號包: import signal
  2. 定義逾時時呼叫的處理函數。該函數應該引發異常來終止進程。
  3. 使用 signal.alarm() 函數指定超時持續時間。
  4. 使用 signal.signal(signal.SIGALRM 設定 SIGALRM 訊號處理程序,處理程序)。
  5. 在 try 區塊中呼叫可能會停止的函數。如果超時,將引發處理程序異常。
  6. 如果需要,可以在函數在指定時間內完成後使用 signal.alarm(0) 取消計時器。

這是一個說明性範例:

import signal

# Handler function
def handler(signum, frame):
    print("Timeout reached!")
    raise Exception("Timeout exception")

# Function that may stall indefinitely
def loop_forever():
    while True:
        print("Looping")
        # Pause execution for 1 second
        time.sleep(1)

# Set timeout to 5 seconds
signal.alarm(5)
signal.signal(signal.SIGALRM, handler)

try:
    loop_forever()
except Exception as exc:
    print("Exception:", exc)

如果函數loop_forever()未能在5秒內完成,則處理函數將被調用,引發超時異常並終止進程。

以上是如何防止 Python 函數因逾時而無限期停止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn