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