一、简单说说异步协程
当我们在程序中用time()里的sleep函数时,往里面设置3秒的时间,程序就会等待3秒结束后才继续执行下面的代码,在等待过程中程序处于终断状态不执行任何代码。但是如果我们调用了异步协程的sleep,程序在等待的过程中会执行其他代码,从而节省代码运行的时间。
当我们的程序需要等待上一条代码执行完成才能执行下一行代码时,不妨用异步协程来减少代码的运行时间,这就是异步协程的大概的概念。下面我用代码举个例子。
二、代码举例
import time
def func1():
print("这是方法一")
time.sleep(3)
print("这是方法一")
def func2():
print("这是方法二")
time.sleep(3)
print("这是方法二")
def func3():
print("这是方法三")
time.sleep(3)
print("这是方法三")
t1 = time.time()
if __name__ == '__main__':
f1 = func1()
f2 = func2()
f3 = func3()
tasks = [
f1,f2,f3
]
t2 = time.time()
print(t2-t1)
运行时间大概是9秒:
正常的函数在执行时是不会中断的,所以你要写一个能够中断的函数,就需要添加async关键。
await 用来用来声明程序挂起,比如异步程序执行到某一步时需要等待的时间很长,就将此挂起,去执行其他的异步程序。await 后面只能跟异步程序或有__await__属性的对象
import asyncio
import time
async def func1():
print("这是方法一")
await asyncio.sleep(3)
print("这是方法一")
async def func2():
print("这是方法二")
await asyncio.sleep(3)
print("这是方法二")
async def func3():
print("这是方法三")
await asyncio.sleep(3)
print("这是方法三")
if __name__ == '__main__':
f1 = func1()
f2 = func2()
f3 = func3()
tasks = [
f1,f2,f3
]
t1 = time.time()
#一次性启动多个任务(协程)
asyncio.run(asyncio.wait(tasks))
t2 = time.time()
print(t2-t1)
用异步协程运行时间大概3秒完成: