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
Lepaskan: 2024-11-24 03:02:12
asal
1001 orang telah melayarinya

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

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!

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