Potřebuji naplánovat periodické volání funkce v pythonu (tj. volala každou minutu), bez blokování event loop (já používám Litrovou rámec s asyncio).
V podstatě je třeba předložit práci na událost, smyčky, časovač, tak, že webserver udržuje slouží příchozí požadavky do té doby, a to zhruba každou minutu volá mé funkce.
Zkoušel jsem mnoho způsobů, například:
def do_work():
print("WORK", flush=True)
async def schedule():
await asyncio.sleep(0)
print("scheduling")
loop = asyncio.get_running_loop()
t = loop.call_later(2, do_work)
print("scheduled")
asyncio.run(schedule())
Ale to taky nikdy dostane popraven (jako výše uvedený kód), nebo to blokuje webserver main event loop. Například, kód výše bych očekával (protože se to dělá v rámci asyncio.run
a schedule
čeká časovač), že "plánování", bude vytištěna po (nebo během), nastavení serveru, ale to není tento případ, to blokuje.