Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melaksanakan Fungsi Tamat Masa dalam Skrip Shell dengan Tempoh Pratakrif?

Bagaimana untuk Melaksanakan Fungsi Tamat Masa dalam Skrip Shell dengan Tempoh Pratakrif?

Barbara Streisand
Barbara Streisandasal
2024-12-07 11:25:15331semak imbas

How to Implement a Timeout Function in Shell Scripting with a Predefined Duration?

Fungsi Tamat Masa dengan Tempoh Pratakrif

Dalam skrip shell, adalah berguna untuk mempunyai mekanisme untuk menamatkan tugasan yang berjalan lama untuk mengelakkan menunggu yang berlebihan . Cabaran yang dihadapi di sini ialah untuk membalut fungsi dalam skrip tamat masa, mengembalikan Palsu jika ia melebihi had masa yang ditetapkan.

Satu pendekatan ialah menetapkan pemasa tak segerak yang mencetuskan respons Palsu selepas selang masa yang telah ditetapkan. Nasib baik, penyelesaian sedemikian boleh dicapai menggunakan pengendali isyarat dalam pustaka isyarat (tersedia pada sistem berasaskan UNIX).

Proses ini melibatkan penciptaan penghias tersuai (@masa tamat) yang memanfaatkan isyarat. alarm() untuk menetapkan penggera untuk selang masa yang dikehendaki. Dalam fungsi yang dihias, apabila penggera tamat tempoh, pengecualian TimeoutError dinaikkan, dengan berkesan mengganggu operasi.

Untuk memasukkan penyelesaian ini ke dalam kod anda, simpan kod berikut sebagai timeout.py dan importnya:

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

Sekarang, dalam kod aplikasi anda, beri anotasi sebarang fungsi yang mungkin berjalan lama dengan @penghias tamat masa. Contohnya:

from timeout import timeout

# Short timeout
@timeout(5)
def slow_function():
    # ...

# Default timeout
@timeout
def another_slow_function():
    # ...

# Customize timeout and error message
@timeout(30, error_message="Task timed out")
def yet_another_slow_function():
    # ...

Pendekatan ini memastikan bahawa jika fungsi mengambil masa lebih lama daripada selang tamat masa yang ditentukan, ia akan menimbulkan Ralat Tamat Masa dan mengembalikan Salah, membolehkan anda mengendalikan kelewatan yang tidak dijangka dengan anggun.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Tamat Masa dalam Skrip Shell dengan Tempoh Pratakrif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn