Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Saya Boleh Menetapkan Masa Tamat untuk Fungsi dalam Python untuk Mencegah Kebuntuan?

Bagaimanakah Saya Boleh Menetapkan Masa Tamat untuk Fungsi dalam Python untuk Mencegah Kebuntuan?

Linda Hamilton
Lepaskan: 2024-12-04 17:24:15
asal
612 orang telah melayarinya

How Can I Set a Timeout for a Function in Python to Prevent Deadlocks?

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

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

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!

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