Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengehadkan Masa Pelaksanaan Panggilan Fungsi Penyekatan dalam Python?

Bagaimana untuk Mengehadkan Masa Pelaksanaan Panggilan Fungsi Penyekatan dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-24 03:02:12983semak imbas

How to Limit the Execution Time of a Blocking Function Call in Python?

Menghadkan Masa Pelaksanaan Panggilan Fungsi

Anda telah menemui panggilan fungsi berkaitan soket dalam kod anda yang menunjukkan sekatan dilanjutkan sekali-sekala, mencecah jam pada masa-masa tertentu. Ini menimbulkan keadaan yang tidak boleh diterima. Untuk mengurangkan isu ini, anda mencari penyelesaian dalam kod anda untuk mengehadkan masa pelaksanaan fungsi.

Seperti yang dicadangkan dalam jawapan yang diterima, menggunakan urutan lain mungkin memberikan penyelesaian. Walau bagaimanapun, pendekatan yang dipertingkatkan ialah menggunakan pernyataan with, menawarkan kemudahan sintaksis untuk fungsi tamat masa:

import signal
from contextlib import contextmanager

class TimeoutException(Exception): pass

@contextmanager
def time_limit(seconds):
    def signal_handler(signum, frame):
        raise TimeoutException("Timed out!")
    signal.signal(signal.SIGALRM, signal_handler)
    signal.alarm(seconds)
    try:
        yield
    finally:
        signal.alarm(0)

try:
    with time_limit(10):
        long_function_call()
except TimeoutException as e:
    print("Timed out!")

Pendekatan ini membolehkan anda mengendalikan tamat masa dengan lebih elegan dalam satu blok, menaikkan TimeoutException jika fungsi melebihi had masa yang ditetapkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Masa Pelaksanaan Panggilan Fungsi Penyekatan dalam Python?. 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