超時機制
一般應用于處理阻塞問題
場景:
- 復雜度較大的計算(解析)某個數值、加解密計算等
- 請求中遇到阻塞,避免長時間等待
- 網絡波動,避免長時間請求,浪費時間
1. requests 請求超時機制
reqeusts 依賴中的Post請求中自帶 timeout 參數,可以直接設置
response = requests.post(url, data=request_body, headers=headers, timeout=timeout)
2. 其他函數時間超時機制
自定義一個超時函數 timeout()
import signal
from functools import wraps
import errno
import osclass TimeoutError(Exception):passdef timeout(seconds=10, error_message=os.strerror(errno.ETIME)):def decorator(func):def _handle_timeout(signum, frame):raise TimeoutError(error_message)def wrapper(*args, **kwargs):signal.signal(signal.SIGALRM, _handle_timeout)signal.alarm(seconds)try:result = func(*args, **kwargs)finally:signal.alarm(0)return resultreturn wraps(func)(wrapper)return decorator@timeout(5)
def long_running_function():# 這里是可能會長時間運行的代碼# 例如,可以使用 time.sleep 來模擬長時間運行的操作import timetime.sleep(10)try:long_running_function()
except TimeoutError as e:print("Function call timed out")
注:
- timeout() 函數的編寫借鑒 ChatGPT4.0