📜  基本 asyncio 语法 - Python (1)

📅  最后修改于: 2023-12-03 14:51:36.507000             🧑  作者: Mango

基本 asyncio 语法 - Python

asyncio是Python 3.4引入的标准库,是一个异步I/O库,可以用来编写高效的并发代码。本文将介绍asyncio基本语法。

协程

asyncio中,使用协程(coroutine)进行异步编程。协程是一种轻量级的线程,可以看作是一种用户级别的线程,相比于操作系统层面的线程,协程更加高效。

在Python中使用协程,需要用到关键字asyncawait

import asyncio

async def hello():
    print("Hello")
    await asyncio.sleep(1)
    print("World")

loop = asyncio.get_event_loop()
loop.run_until_complete(hello())

在上面的代码中,我们定义了一个名为hello的协程,使用async def关键字来定义。协程内部使用await关键字来等待异步操作完成,比如等待asyncio.sleep()完成。

在程序的最后,我们创建了一个事件循环(event loop),并使用run_until_complete()方法来运行hello()协程。

任务

asyncio中,可以使用asyncio.Task来包装协程,从而将协程提交给事件循环进行调度。

import asyncio

async def hello():
    print("Hello")
    await asyncio.sleep(1)
    print("World")

loop = asyncio.get_event_loop()
task = asyncio.ensure_future(hello())
loop.run_until_complete(task)

在上面的代码中,我们使用asyncio.ensure_future()方法将hello()协程包装成一个任务(task),然后将任务提交给事件循环进行调度。

回调

asyncio中,可以使用回调来处理异步操作完成的结果。使用asyncio.Future表示异步操作的返回结果,当异步操作完成后,调用Future.set_result()方法设置结果。

import asyncio

async def slow_add(a, b):
    await asyncio.sleep(1)
    return a + b

def got_result(future):
    print(future.result())

loop = asyncio.get_event_loop()
future = asyncio.Future()
asyncio.ensure_future(slow_add(3, 4)).add_done_callback(got_result)
loop.run_until_complete(asyncio.sleep(2))

在上面的代码中,我们定义了一个协程slow_add,模拟一个耗时的加法操作。在main()函数中,我们创建一个asyncio.Future实例,使用add_done_callback()方法设置回调函数got_result。当slow_add协程执行完成时,会调用回调函数,并将结果传递给回调函数。

总结

asyncio是Python中强大的异步I/O库,可以用于编写高效的并发代码。Python的协程模型是异步编程的重要手段,可以使用asyncawait关键字编写协程。asyncio.Task可以用于包装协程,通过事件循环进行调度。asyncio.Future可以用于处理异步操作的结果,使用回调来处理操作完成后的结果。