那么有没有办法让同步代码与异步代码看起来也是同时运行的呢?方法就是使用事件循环的.run_in_executor()方法。
我们来看一下 Python 官方文档[1]中的说法:
那么怎么使用呢?还是以非常耗时的递归方式计算斐波那契数列的这个函数为例:
def sync_calc_fib(n):
if n in [1, 2]:
return1
return sync_calc_fib(n - 1) + sync_calc_fib(n - 2)
async def calc_fib(n):
result = sync_calc_fib(n)
print(f'第 {n} 项计算完成,结果是:{result}')
return result
我们现在需要用 aiohttp 访问一个延迟5秒的网页,同时计算斐波那契数列第36项。
首先我们看看单独计算第36项需要5秒钟:
我们再来看看如果直接把这计算斐波那契数列和请求网站的两个异步任务放在一起“并行”,实际时间是两个任务的时间叠加:
具体原因我在上一