Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menghalang Fungsi Skrip Shell daripada Tamat Masa Apabila Mengakses Sumber Jauh?

Bagaimanakah Saya Boleh Menghalang Fungsi Skrip Shell daripada Tamat Masa Apabila Mengakses Sumber Jauh?

Patricia Arquette
Lepaskan: 2024-11-30 13:02:19
asal
249 orang telah melayarinya

How Can I Prevent Shell Script Functions from Timing Out When Accessing Remote Resources?

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
Salin selepas log masuk

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():
    ...
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan