Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

252
Vistas
¿Cómo usar AsyncIOScheduler para ejecutar funciones desde otra función?

Tengo dificultades para entender cómo funciona AsyncIOScheduler y cómo puedo programar una función dentro de la función principal, o cuál es la forma correcta de hacerlo.

¿Cómo puedo ejecutar la función foo cada 10 segundos?

Supongamos que tengo esta estructura:

 package/ controllers.py main.py

Del archivo controllers.py tengo una función llamada foo y la función es algo como esto:

 async def foo(): print('Hello World')

Me gustaría ejecutar la función foo (y muchas otras) desde el archivo main.py , y este archivo es como:

 import asyncio from controllers import foo, bar from apscheduler.schedulers.asyncio import AsyncIOScheduler async def main(): # Init message print('\nPress Ctrl-C to quit at anytime!\n' ) await asyncio.create_task(bar()) scheduler = AsyncIOScheduler() scheduler.add_job(await asyncio.create_task(foo()), "interval", seconds=10) scheduler.start() if __name__ == "__main__": while True: try: asyncio.run(main()) except Exception as e: print("Exception: " + str(e))

¿Es correcto ejecutar el programador de esta manera? ¿O el temporizador se reiniciará cada vez que se ejecute la función principal?

Probé el siguiente código, el intervalo de bucle funciona, pero la función main no.

 import asyncio from controllers import foo, bar from apscheduler.schedulers.asyncio import AsyncIOScheduler async def main(): # Init message print('\nPress Ctrl-C to quit at anytime!\n' ) await asyncio.create_task(bar()) if __name__ == "__main__": scheduler = AsyncIOScheduler() scheduler.add_job(foo, "interval", seconds=10) scheduler.start() while True: try: asyncio.get_event_loop().run_forever() asyncio.run(main()) except Exception as e: print("Exception: " + str(e))

Si cambié el orden de:

 asyncio.get_event_loop().run_forever() asyncio.run(main())

para:

 asyncio.run(main()) asyncio.get_event_loop().run_forever()

Recibo el error: There is no current event loop in thread 'MainThread'.

El ciclo funciona (solo programador), pero la función main no se está ejecutando, ¿cómo puedo juntarlos en un ciclo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Supongo que desea ejecutar su función main() para siempre, por lo que puede intentarlo de esta manera.

controllers.py

 from datetime import datetime async def foo(): print(f'{datetime.now()} Foo') async def bar(): print(f'{datetime.now()} Bar')

main.py

 import asyncio from controllers import foo, bar from apscheduler.schedulers.asyncio import AsyncIOScheduler async def main(): # Init message print('\nPress Ctrl-C to quit at anytime!\n') scheduler = AsyncIOScheduler() scheduler.add_job(foo, "interval", seconds=2) scheduler.start() while True: await asyncio.create_task(bar()) await asyncio.sleep(1) if __name__ == "__main__": loop = asyncio.get_event_loop() loop.create_task(main()) loop.run_forever()

Producción:

 Press Ctrl-C to quit at anytime! 2022-01-09 03:38:10.468914 Bar 2022-01-09 03:38:11.472966 Bar 2022-01-09 03:38:12.468882 Foo 2022-01-09 03:38:12.473449 Bar 2022-01-09 03:38:13.477678 Bar 2022-01-09 03:38:14.469389 Foo 2022-01-09 03:38:14.480098 Bar 2022-01-09 03:38:15.483889 Bar 2022-01-09 03:38:16.472584 Foo 2022-01-09 03:38:16.487105 Bar 2022-01-09 03:38:17.492550 Bar 2022-01-09 03:38:18.467403 Foo 2022-01-09 03:38:18.493330 Bar 2022-01-09 03:38:19.496680 Bar 2022-01-09 03:38:20.471553 Foo 2022-01-09 03:38:20.499928 Bar 2022-01-09 03:38:21.503572 Bar 2022-01-09 03:38:22.470329 Foo 2022-01-09 03:38:22.505597 Bar 2022-01-09 03:38:23.510854 Bar 2022-01-09 03:38:24.471455 Foo ...

Además, puede ejecutar funciones periódicas sin usar AsyncIOScheduler como este .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda