Легко создать сопрограмму, которая вызывает другую сопрограмму, но если, например, я хочу создать сопрограмму, которая не блокирует, как мне это сделать?Должен ли я запустить поток, который выполняет эти вычисления, а затем каким-то образом перехватить обратный вызов?
Глядя на реализацию asyncio.sleep, они делают это, вызывая цикл, чтобы он возвращался позже во времени вместо "реального" сна
Я пришел к этому, но он все еще не работает.
import asyncio
import concurrent.futures
def inner_task(num_1, num_2):
return num_1 ** num_2
async def exp_coroutine(num_1, num_2):
executor = concurrent.futures.ProcessPoolExecutor()
return await loop.run_in_executor(executor, inner_task, num_1, num_2)
async def my_base_coroutine(num_1, num_2):
results = await exp_coroutine(num_1, num_2)
print(results)
return results
loop = asyncio.get_event_loop()
loop.create_task(my_base_coroutine(23, 876))
loop.create_task(my_base_coroutine(23, 1))
loop.create_task(my_base_coroutine(23, 35))
tasks = asyncio.Task.all_tasks()
loop.run_until_complete(asyncio.gather(*tasks))
В настоящее время я получаю результаты точно в том виде, в котором они запрашиваются, и ожидал, что сначала будут более простые вычисления.