开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Python 异步/等待

在本文中,我们展示了如何在Python中使用async/await关键字。

通过异步编程,我们可以在主程序执行的同时执行任务。async和await关键字简化了Python中的异步编程。Python在语言中内置了异步编程模型。

Python协程

协程是一种用于协作式多任务处理的Python函数,它们可以在其中暂停和恢复。使用asyncdef语法声明协程。

async/await关键字

async/await关键字在Python3.7中被标准化。它们简化了Python中的异步编程。async关键字用于创建Python协程。await关键字暂停协程的执行,直到它完成并返回结果数据。await关键字仅在异步函数中有效。

Python异步/等待示例I

下面是一个使用async/await关键字的简单程序。

#!/usr/bin/python

import asyncio

async def mul(x, y):
    return x * y

loop = asyncio.get_event_loop()

res = loop.run_until_complete(mul(5, 5))
print(res2)

loop.close()

程序创建并运行一个异步函数。

async def mul(x, y):
    return x * y

协程是使用async修饰符声明的函数。

loop = asyncio.get_event_loop()

get_event_loop返回一个异步事件循环。需要一个事件循环来执行异步代码。

res = loop.run_until_complete(mul(5, 5))

run_until_complete函数运行事件循环,直到future完成。它返回未来的结果,或引发其异常。Future表示异步操作的最终结果。

Python异步/等待示例二

使用asyncio.run,我们简化了代码。该函数创建一个事件循环,调度协程,最后关闭循环。

#!/usr/bin/python

import asyncio

async def add(x, y):
    return x + y

async def get_results():
    res1 = await add(3, 4)
    res2 = await add(8, 5)

    print(res1, res2)

asyncio.run(get_results())

在示例中,我们运行两个异步函数。

$ python simple2.py 
7 13

Python异步/等待示例三

Gathering是安排多个协程同时运行的便捷方式。我们使用asyncio.gather收集协程。

使用asyncio.sleep,我们创建了一个在指定秒数内完成的协程。它通常用于模拟长时间运行的任务。

#!/usr/bin/python

import asyncio
import time
import random

async def task1():

    wait = random.randint(0, 3)
    await asyncio.sleep(wait)
    print("task 1 finished")


async def task2():

    wait = random.randint(0, 3)
    await asyncio.sleep(wait)
    print("task 2 finished")


async def task3():

    wait = random.randint(0, 3)
    await asyncio.sleep(wait)
    print("task 3 finished")


async def main():

    for x in range(2):
        await asyncio.gather(task1(), task2(), task3())
        time.sleep(1)
        print('----------------------------')

t1 = time.perf_counter()
asyncio.run(main())
t2 = time.perf_counter()

print(f'Total time elapsed: {t2-t1:0.2f} seconds')

我们有三个任务在随机秒数内完成。通过这种方式,我们模拟了三个不同的长时间运行任务的执行。

async def main():

    for x in range(2):
        await asyncio.gather(task1(), task2(), task3())
        print('----------------------------')

主要功能集合了所有三个任务。它也是一个协程,用async装饰。我们使用await关键字等待asyncio.gather的结果。

$ python simple3.py 
task 2 finished
task 1 finished
task 3 finished
----------------------------
task 3 finished
task 2 finished
task 1 finished
----------------------------
Total time elapsed: 8.01 seconds

在本文中,我们使用了Python中的async/await关键字。

列出所有Python教程。

未经允许不得转载:我爱分享网 » Python 异步/等待

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏