Llamar a una funcion cada determinado tiempo sin bloquear código en python


Editado el 11 de Mayo del 2022 a las 07:42:30 por Rafael Corro



En este artículo aprenderemos a ejecutar una función en segundo plano, sin detener la ejecución del resto del código; Par ello necesitamos importar la biblioteca de python "threading" para usar la función "Timer".

import time, threading

¿Cómo funciona?

threading.Timer (Delay Duration, function, args = None, kwargs = None)

  • Delay Duration es el intervalo de tiempo en segundos durante el cual debe esperar para ejecutar la función especificada.
  • Function es la función que se ejecutará
  • arg se utilizará una lista vacía de forma predeterminada si el valor es None
  • kwargs se utilizará un dictado vacío de forma predeterminada si el valor es None

Ejemplo 1

En el ejemplo se ejecuta cada 5 segundos una función, a la que se le pasa dos parametros:

import time, threading

def my_function(x,y):
    #Mostramos el valor de los argumentos "x" y de "y"
    print('x: '+x+' y: '+y)
    #ejecutamos la función  en otro hilo cada 5 segundos
    threading.Timer(5, my_function,[x,y]).start()

#llamamos a la función pasando un par de argumentos, por ejemplo 3 y 5
my_function("3","5")
print("Exit Program\n")

La salida sería:

x: 3 y: 5
Exit Program
x: 3 y: 5
x: 3 y: 5
x: 3 y: 5
...

Ejemplo 2

En el siguiente ejemplo se ejecuta una sola vez la función, pasados 10 segundos:

import time, threading

def my_function():
    print("Hello from a function \n")
T = threading.Timer(10.0, my_function) T.start() print("Exit Program\n")

La salida sería:

Exit Program
Hello from a function

Ejemplo 3

Creamos un blucle infinito con una espera de 5 segundos. La función "sleep" no bloquea la ejecución del código porque está corriendo en otro hilo y no afecta al resto del script.

import time, threading

def my_function():
    while True:
        print("Hello from a function \n")
        time.sleep(5)   # esperar 5 segundos.

# Iniciamos en segundo plano.
t = threading.Thread(target=my_function)
t.start()
print("Exit Program\n")

La salida :

Hello from a function
Exit Program
Hello from a function
Hello from a function
Hello from a function
....

Espero que os haya sido de utilidad ;)

Valoración de los lectores sobre: Llamar a una funcion cada determinado tiempo sin bloquear código en python

  • valoración positiva
  • valoración positiva
  • valoración positiva
  • valoración positiva
  • valoración negativa
  • 4.3 sobre 5 (4 votos)

¿Te ha parecido útil o interesante?   Tú opinión es importante, gracias!

Nada
Muy poco
A medias
Bastante
Mucho

Deja un Comentario: