es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada asíncrona de Python que actualiza una variable.

Tengo una función def act(obs) que devuelve un número decimal y es computacionalmente costosa (toma algún tiempo para ejecutarse).

import time
import random
def act(obs):
    time.sleep(5) # simula el tiempo de cálculo
    action = random.random()
    return action

Regularmente sigo llamando a esta función en un script más rápido de lo que tarda en ejecutarse. No quiero esperar cada vez que llamo a la función. Preferiría usar el valor devuelto de un cálculo anterior. ¿Cómo puedo lograr esto?

Algo que he pensado es tener una variable global que se actualice en la función y sigo leyendo la variable global, aunque no estoy seguro si esa es la mejor manera de hacerlo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una solución para lograr esto es utilizar el almacenamiento en caché. Puedes utilizar una biblioteca como functools.lru_cache para almacenar en caché los resultados de la llamada a la función.

    Aquí tienes un ejemplo de cómo puedes utilizarlo:

    from functools import lru_cache
    
    @lru_cache(maxsize=None) # None means cache all values
    def act(obs):
        time.sleep(5) # simular tiempo de procesamiento
        action = random.random()
        return action
    

    Con esto, cuando llames a la función con el mismo argumento obs, devolverá el resultado almacenado en caché sin tener que volver a calcular la función nuevamente.

    Sin embargo, ten en cuenta que si tus entradas a la función están cambiando constantemente y necesitas el resultado más reciente, el almacenamiento en caché puede no ser la solución para ti. En ese caso, es posible que desees considerar el uso de hilos para ejecutar la función de forma asíncrona o optimizar la función para reducir su tiempo de procesamiento.

Comments are closed.