线性平方计算
假设计算一次平方后用线性的time.sleep(3)停顿三秒,可想而知计算0-100的平方需要300秒左右的时间。
异步协程
如果能使用异步协程的思想解决这个问题,将会变得极快!
asyncio把生成器实现协程的过程给抽象了,使得代码看起来像线性一样便于人们理解,是一个非常方便的工具。
# 异步协程计算平方
import time
import asyncio
async def Nonblocking_function_square(number):
await asyncio.sleep(3)
print('{}的平方结果是{}'.format(number,number**2))
start = time.time() # 计算时间头
loop = asyncio.get_event_loop() #事件循环
tasks = [Nonblocking_function_square(i) for i in range(100)] #定义协程对象
loop.run_until_complete(asyncio.wait(tasks)) # 添加对象进入循环
print('异步协程计算平方耗时%.5f' % float(time.time()-start))
结果如下:
...
55的平方结果是3025
24的平方结果是576
54的平方结果是2916
23的平方结果是529
52的平方结果是2704
53的平方结果是2809
21的平方结果是441
50的平方结果是2500
51的平方结果是2601
异步协程计算平方耗时3.01580
对比线性的运行结果,快了10倍!
异步协程真是太神奇了!