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.

¿Llamar a una función asincrónica periódicamente?

Tengo la siguiente función para llamar a s(c) cada 24 horas.

def schedule_next_sync():
t = datetime.datetime.now()
t = t.replace(hour=0) + datetime.timedelta(hours=24)
def wrapper():
s(c)
schedule_next_sync()
tornado.ioloop.IOLoop.current().add_timeout(datetime.datetime.timestamp(t), wrapper)

Sin embargo, s() será cambiado por una función asíncrona.

async def s(c):

¿Cómo actualizar schedule_next_sync para la función asíncrona? ¿Debería ejecutar s() de manera sincrónica? ¿O cambiar schedule_next_sync() a una función asíncrona?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Deberías cambiar schedule_next_sync() a una función asíncrona. Puedes utilizar asyncio.ensure_future() para ejecutar s() de forma asíncrona. Por ejemplo:

    async def schedule_next_sync():
        t = datetime.datetime.now()
        t = t.replace(hour=0) + datetime.timedelta(hours=24)
        async def wrapper():
            await asyncio.ensure_future(s(c))
            await schedule_next_sync()
        tornado.ioloop.IOLoop.current().add_timeout(datetime.datetime.timestamp(t), wrapper)
    

Comments are closed.