Fungsi Tamat Masa: Cara Mengehadkan Masa Pelaksanaan
Dalam skrip shell, ia boleh memberi manfaat untuk menghalang fungsi tertentu daripada dilaksanakan tanpa henti, terutamanya apabila ia melibatkan mengakses sumber jauh seperti URL. Dengan menetapkan tamat masa, anda boleh memastikan bahawa fungsi tidak membekukan skrip anda disebabkan oleh pelayan yang perlahan atau tidak bertindak balas.
Salah satu kaedah untuk melaksanakan tamat masa ialah menggunakan penghias tamat masa modul isyarat. Penghias ini, yang diterangkan dalam dokumentasi isyarat, menggunakan pengendali isyarat untuk menetapkan penggera. Setelah selang masa yang ditentukan berlalu, pengecualian dinaikkan, menghentikan fungsi dengan berkesan.
Untuk menggunakan penghias tamat masa, importnya daripada modul timeout.py dan tentukan tempoh tamat masa (dalam saat) sebagai hujah. Di bawah ialah contoh coretan yang mencipta penghias dengan tamat masa lalai selama 10 saat dan mesej ralat tersuai:
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
Untuk menggunakan penghias, hanya gunakannya pada fungsi anda yang sudah lama berjalan, seperti dalam yang berikut contoh:
# Default timeout of 10 seconds @timeout def long_running_function1(): ... # Timeout of 5 seconds @timeout(5) def long_running_function2(): ... # Timeout of 30 seconds, with custom error message 'Connection timed out' @timeout(30, os.strerror(errno.ETIMEDOUT)) def long_running_function3(): ...
Ingat bahawa pelaksanaan ini hanya terpakai pada sistem UNIX. Dengan melaksanakan tamat masa menggunakan penghias modul isyarat, anda kini mempunyai kawalan ke atas tempoh pelaksanaan fungsi anda dan menghalangnya daripada menahan skrip shell anda secara tidak perlu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Fungsi Skrip Shell daripada Tamat Masa Apabila Mengakses Sumber Jauh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!