Python 的 asyncio 库是 Python 用于编写并发代码的强大工具。本文将深入探讨 asyncio 的高级特性,帮助你更好地利用它。

异步函数

异步函数是 asyncio 的核心。它们使用 async def 语法定义,并在函数体内部使用 await 关键字来挂起函数执行。

async def main():
    print('Hello')
    await asyncio.sleep(1)
    print('World!')

# 运行异步函数
asyncio.run(main())

协程

协程是异步编程的基础。它们是轻量级的线程,可以在单个线程内并发执行多个任务。

async def hello(name):
    print(f'Hello {name}!')
    await asyncio.sleep(1)
    print(f'Goodbye {name}!')

async def main():
    await asyncio.gather(hello('Alice'), hello('Bob'))

asyncio.run(main())

任务

任务是对协程的封装,用于跟踪协程的执行状态。可以使用 asyncio.create_task() 函数创建任务。

async def main():
    task1 = asyncio.create_task(hello('Alice'))
    task2 = asyncio.create_task(hello('Bob'))
    await asyncio.gather(task1, task2)

asyncio.run(main())

网络编程

asyncio 提供了强大的网络编程功能,可以用于编写异步 HTTP 服务器和客户端。

import asyncio

async def handle_request(reader, writer):
    data = await reader.read(100)
    print(data.decode())
    writer.write(data)
    await writer.drain()
    writer.close()

async def main():
    server = await asyncio.start_server(handle_request, '127.0.0.1', 8888)
    async with server:
        await server.serve_forever()

asyncio.run(main())

扩展阅读

想了解更多关于 asyncio 的内容,可以阅读以下文章:

Python asyncio