【Python】多任务异步协程

一、简单说说异步协程

当我们在程序中用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秒完成:

おすすめ

転載: blog.csdn.net/qq_26082507/article/details/121512627