首頁  >  文章  >  後端開發  >  如何限制Python中阻塞函數呼叫的執行時間?

如何限制Python中阻塞函數呼叫的執行時間?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-24 03:02:12912瀏覽

How to Limit the Execution Time of a Blocking Function Call in Python?

限制函數調用的執行時間

您在程式碼中遇到了與套接字相關的函數調用,該函數偶爾會調用出現擴展阻塞,有時達到數小時。這造成了不可接受的情況。為了緩解此問題,您可以在程式碼中尋求解決方案來限制函數的執行時間。

正如已接受的答案中所建議的,使用另一個執行緒可能會提供解決方案。然而,一種增強的方法是利用with 語句,為超時函數提供語法便利:

import signal
from contextlib import contextmanager

class TimeoutException(Exception): pass

@contextmanager
def time_limit(seconds):
    def signal_handler(signum, frame):
        raise TimeoutException("Timed out!")
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(seconds)
    try:
        yield
    finally:
        signal.alarm(0)

try:
    with time_limit(10):
        long_function_call()
except TimeoutException as e:
    print("Timed out!")

這種方法允許您在區塊內更優雅地處理超時,如果函數超過,則引發TimeoutException指定時限。

以上是如何限制Python中阻塞函數呼叫的執行時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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