I need to wait until a certain condition/equation becomes True in a asynchronous function in python. Basically it is a flag variable which would be flagged by a coroutine running in asyncio.create_task(). I want to await until it is flagged in the main loop of asyncio. Here’s my current code:
import asyncio flag = False async def bg_tsk(): await asyncio.sleep(10) flag = True async def waiter(): asyncio.create_task(bg_tsk()) await asyncio.sleep(0) # I find the below part unpythonic while not flag: await asyncio.sleep(0.2) asyncio.run(waiter())
Is there any better implementation of this? Or is this the best way possible? I have tried using ‘asyncio.Event’, but it doesnt seem to work with ‘asyncio.create_task()’.
Advertisement
Answer
Using of asyncio.Event
is quite straightforward. Sample below.
Note: Event should be created from inside coroutine for correct work.
import asyncio async def bg_tsk(flag): await asyncio.sleep(3) flag.set() async def waiter(): flag = asyncio.Event() asyncio.create_task(bg_tsk(flag)) await flag.wait() print("After waiting") asyncio.run(waiter())