Začíná nekonečná smyčka z asynchronní funkce

0

Otázka

Snažím se pravidelně query API. Můj kód struktura je následující:

async def QueryData(): 
    print(datetime.datetime.now())

async def main():
    await TestApiConnection()
    
    scheduler = AsyncIOScheduler(timezone="Europe/Berlin")
    scheduler.add_job(QueryData, 'cron', minute='0-59')
    scheduler.start()
    try:
        asyncio.get_event_loop().run_forever()
    except (KeyboardInterrupt, SystemExit):
        pass
        scheduler.shutdown(wait=False)


if __name__ == "__main__":
    asyncio.run(main())

Následující chyba je vyvolána, když jsem spustit tento:

v run_forever prosadit samostatně._self_reading_future není AssertionError

Když jsem zase hlavní funkce na synchronní funkce, QueryData práce začíná tím, že výsledek TestApiConnection není očekávané.

async def QueryData(): 
    print(datetime.datetime.now())

def main():
    TestApiConnection()
    ...

if __name__ == "__main__":
    main()

Tak jak mám začít práci od asynchronní hlavní metoda? Nebo bych měl restrukturalizovat kód?

apscheduler python python-asyncio
2021-11-23 10:56:59
1

Nejlepší odpověď

2

Nelze volat run_forever() z vnitřní události, smyčka,, že funkce je určena pro synchronizaci kódu, který potřebuje, aby se oheň událost smyčky. Při použití asyncio.run() můžete jednoduše čekají na něco, co nikdy neskončí. Například, můžete nahradit asyncio.get_event_loop().run_forever() s:

await asyncio.Event().wait()

Všimněte si také, že nepotřebujete pass před volání scheduler.shutdown(). Jediným účelem pass klíčové slovo je jako inertní stand-in pro místa, kde gramatiky vyžaduje prohlášení, a budete mít nic poskytnout.

2021-11-23 13:25:23

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................