Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Melaksanakan Fungsi Tamat Masa untuk Mencegah Proses Berlangsung Lama?

Bagaimana untuk Melaksanakan Fungsi Tamat Masa untuk Mencegah Proses Berlangsung Lama?

Barbara Streisand
Lepaskan: 2024-11-30 08:55:15
asal
952 orang telah melayarinya

How to Implement a Timeout Function to Prevent Long-Running Processes?

Fungsi Tamat Masa Jika Mengambil Masa Terlalu Lama untuk Selesai

Untuk mengelakkan situasi di mana fungsi tertentu mengambil masa terlalu lama untuk diselesaikan, a mekanisme tamat masa boleh dilaksanakan. Ini melibatkan menetapkan penggera menggunakan pengendali isyarat yang akan menimbulkan pengecualian selepas tempoh masa yang telah ditetapkan. Kaedah ini amat berguna untuk persekitaran UNIX.

Begini cara untuk menggunakan mekanisme ini:

  1. Buat Penghias:
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
  1. Gunakan Penghias:
from timeout import timeout

# Timeout a long running function with the default expiry of 10 seconds.
@timeout
def long_running_function():
    ...

# Timeout after 5 seconds
@timeout(5)
def another_long_running_function():
    ...
Salin selepas log masuk

Ini memastikan sebarang fungsi yang dihiasi dengan @masa tamat akan terganggu jika ia melebihi tempoh tamat masa yang ditetapkan.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Tamat Masa untuk Mencegah Proses Berlangsung Lama?. 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