實作函數呼叫的時間限制
在某些情況下,程式碼中的函數呼叫可能會意外阻塞,導致不可接受的延遲。當函數源自外部模組時,就會出現此問題,從而使您對其執行的控制有限。為了解決這個問題,必須對函數的運行時間引入時間限制。
一個有效的解決方案是使用另一個執行緒。透過使用逾時函數,您可以指定原始函數呼叫的最大執行持續時間。如果超過此時間限制,則會引發異常,使您能夠優雅地處理這種情況。
以下改進的實作提供了使用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!")
透過利用這種技術,您可以有效地限制函數呼叫的執行時間,防止過度延遲並確保應用程式受控和響應。
以上是如何在Python中實作阻塞函數呼叫的時間限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!