Código de Python - Definir un tiempo limite para la ejecución de una función

Imágen de perfil
Val: 2.154
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Definir un tiempo limite para la ejecución de una funcióngráfica de visualizaciones


Python

Publicado el 20 de Noviembre del 2016 por Xve (285 códigos)
4.602 visualizaciones desde el 20 de Noviembre del 2016
Este simple código, muestra como finalizar una función si dura mas de los segundos indicados. Se utilizan mucho cuando pueden haber procesos que no sabemos muy bien si se pueden quedar colgados pasados unos minutos al utilizar aplicaciones externas o procesos externos en los que no podemos controlarlos.

Requerimientos

Python 2.7 y Python 3.x

Versión 1.0
estrellaestrellaestrellaestrellaestrella(2)

Actualizado el 30 de Noviembre del 2016 (Publicado el 20 de Noviembre del 2016)gráfica de visualizaciones de la versión: Versión 1.0
4.603 visualizaciones desde el 20 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf-8 -*-
 
from multiprocessing import Process
from time import sleep
 
# En multiprocesamiento, los procesos se generan creando un objeto Process
# y luego llamando a su método start()
# Process utiliza la API de threading.Thread
 
def funcionA(time):
    print("Ejecutando una función que dura %s segundos" % time)
    sleep(time)
 
 
def ejecutarConTiempoLimite(func, args, time):
    """
    Ejecuta una función con un limite de tiempo
    Tiene que recibir:
        func: el nombre de la función a ejecutar
        args: una tupla con los argumentos a pasar a la función
    Devuelve True si ha finalizado la función correctamente

    https://docs.python.org/2/library/multiprocessing.html
    """
 
    p = Process(target=func, args=args)
    p.start()
    p.join(time)
    if p.is_alive():
        p.terminate()
        print("Ha finalizado por timeout")
        return False
 
    print("Se ha ejecutado correctamente")
    return True
 
 
if __name__ == '__main__':
    ejecutarConTiempoLimite(funcionA, (1.5, ), 2.5) # True
    ejecutarConTiempoLimite(funcionA, (3.5, ), 2.5) # False



Comentarios sobre la versión: Versión 1.0 (2)

Imágen de perfil
23 de Noviembre del 2016
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder
ADR
24 de Septiembre del 2019
estrellaestrellaestrellaestrellaestrella
excelente solución
Responder

Comentar la versión: Versión 1.0

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3764