Issue
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()'.
Solution
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())
Answered By - alex_noname
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.