Сразу скажу, что как вы описали - не заработает. Любой синхронный код заблокирует выполнение event_loop, поэтому в асинхронном коде следует избегать использование синхронных вызовов и функций.
Желаемого можно добиться, разбив функцию async_io на две части - первую до запроса к БД, а вторую - выполняющую запрос к БД. Тогда запрос к БД можно выполнить одновременно с расчетами через
asyncio.gather
import asyncio
async def async_io():
print("async_io start")
result = 100
print("async_io end")
return result
async def async_db_query(data):
print("async_db_query start")
result = await asyncio.sleep(1, result=500)
print("async_db_query end")
return result
async def async_calculating(data):
print("async_calculating start")
res = 0
for i in range(1000):
res += 1
print("async_calculating end")
return res
async def task():
print("Task start")
res_async = await async_io()
res = await asyncio.gather(
async_db_query(res_async),
async_calculating(res_async)
)
task_calc = sum(res)
print(f"Task end. Result: {task_calc}")
return task_calc
loop = asyncio.get_event_loop()
loop.create_task(task())
loop.run_forever()