Consider a coroutine which calls into another coroutine:
async def foo(bar):
result = await bar()
return result
This works fine if bar
is a coroutine.
What do I need to do (i.e. with what do I need to wrap the call to bar
) so that this code does the right thing if bar
is a normal function?
It is perfectly possible to define a coroutine with async def
even if it never does anything asynchronous (i.e. never uses await
).
However, the question asks how to wrap/modify/call a regular function bar
inside the code for foo
such that bar
can be awaited.
Simply wrap your synchronous function with asyncio.coroutine if needed:
Since it is safe to re-wrap a coroutine, the coroutine function test is actually not required:
Therefore, your code can be re-written as follows: