Tamat Masa Fungsi dengan Tarikh Akhir
Dalam skrip shell, adalah perkara biasa untuk menghadapi kes di mana tugas tertentu, seperti tapak web menangkap skrin, boleh menjadi tidak disangka-sangka memakan masa atau malah gagal untuk disiapkan. Untuk menangani perkara ini, kami boleh melaksanakan mekanisme tamat masa untuk menamatkan fungsi jika ia melebihi had masa yang telah ditetapkan.
Satu pendekatan untuk melaksanakan tamat masa ialah menggunakan modul isyarat Python. Modul ini membolehkan kami menetapkan pemasa dan menimbulkan pengecualian apabila masa tamat. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penyelesaian ini hanya terpakai dalam persekitaran UNIX.
Untuk melaksanakan fungsi tamat masa, kita boleh mencipta penghias yang dipanggil @masa tamat menggunakan kod yang disediakan dalam respons. Penghias ini boleh digunakan pada mana-mana fungsi yang berjalan lama untuk menguatkuasakan had masa. Berikut ialah versi kod yang diubah suai untuk kejelasan:
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
Berikut ialah cara menggunakan penghias @masa tamat dalam kod anda:
from timeout import timeout @timeout def my_long_running_function(): ... def my_main_function(): try: my_long_running_function() except TimeoutError as e: print(e)
Dengan menggunakan penghias @masa tamat pada my_long_running_function, ia kini mempunyai had masa 10 saat. Jika fungsi melebihi tarikh akhir ini, ia akan menimbulkan pengecualian TimeoutError, yang boleh dikendalikan dalam fungsi utama anda. Mekanisme ini memastikan bahawa skrip anda tidak tersekat selama-lamanya disebabkan oleh tugasan yang perlahan atau tidak bertindak balas.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Masa Tamat untuk Fungsi dalam Python untuk Mencegah Kebuntuan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!