Fungsi Tamat Masa Jika Mengambil Masa Terlalu Lama untuk Selesai
Untuk mengelakkan situasi di mana fungsi tertentu mengambil masa terlalu lama untuk diselesaikan, a mekanisme tamat masa boleh dilaksanakan. Ini melibatkan menetapkan penggera menggunakan pengendali isyarat yang akan menimbulkan pengecualian selepas tempoh masa yang telah ditetapkan. Kaedah ini amat berguna untuk persekitaran UNIX.
Begini cara untuk menggunakan mekanisme ini:
import errno import os import signal import functools class TimeoutError(Exception): pass def timeout(seconds=10, error_message=os.strerror(errno.ETIME)): def decorator(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) @functools.wraps(func) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return wrapper return decorator
from timeout import timeout # Timeout a long running function with the default expiry of 10 seconds. @timeout def long_running_function(): ... # Timeout after 5 seconds @timeout(5) def another_long_running_function(): ...
Ini memastikan sebarang fungsi yang dihiasi dengan @masa tamat akan terganggu jika ia melebihi tempoh tamat masa yang ditetapkan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Tamat Masa untuk Mencegah Proses Berlangsung Lama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!