创建一个可以调用其他协程的协程很容易,但是例如,如果我要创建一个不会阻塞的协程,我该怎么做?我应该启动一个执行该计算的线程,然后以某种方式捕获回调吗?
看看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))
目前,我正在准确地获得结果,并希望首先进行更简单的计算。