"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como interromper a execução de uma função Python com tempo limite?

Como interromper a execução de uma função Python com tempo limite?

Publicado em 16/01/2025
Navegar:439

How to Interrupt a Python Function Execution with a Timeout?

Interrompendo uma função com tempo limite em Python

Ao chamar funções que podem parar indefinidamente, impedindo que o script continue a ser executado, torna-se necessário implementar um mecanismo de tempo limite. O pacote signal do Python fornece uma solução para esse problema.

O pacote signal, usado principalmente em sistemas UNIX, permite que você configure um tempo limite para uma função específica. Se a função exceder o tempo limite especificado, um sinal é gerado para interromper a execução.

Exemplo:

Considere uma função loop_forever() que pode ser executada indefinidamente. Precisamos chamar esta função, mas definir um tempo limite de 5 segundos. Se a função demorar mais de 5 segundos, queremos cancelar sua execução.

import signal

# Register a handler for the timeout
def handler(signum, frame):
    print("Timeout! Cancelling function execution.")
    raise Exception("Timeout exceeded!")

# Register the signal function handler
signal.signal(signal.SIGALRM, handler)

# Define a timeout of 5 seconds
signal.alarm(5)

try:
    loop_forever()
except Exception as e:
    print(str(e))
    
# Cancel the timer if the function finishes before timeout
signal.alarm(0)

Neste exemplo, após 5 segundos, a função manipuladora é chamada, gerando uma exceção. Esta exceção é capturada no código pai, que então cancela o cronômetro e encerra a execução da função loop_forever().

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3