模块介绍
asyncio 是 Python3 中用于编写并发代码的标准库,通过事件循环机制开发异步应用。它适用于 Python 3.3 及更高版本,允许开发者使用协程(coroutine)、任务(Task)和未来对象(Future)来处理异步操作,从而实现高效的 IO 操作和网络通信。与传统的同步代码相比,asyncio 大大提高了程序在高并发环境下的性能表现。
应用场景
asyncio 最主要的应用场景在于高并发与 IO 密集型任务中。例如:
- Web Scraping:当需要抓取大量的网页内容时,可以并发进行网络请求。
- 网络服务器:例如 HTTP 服务器或 WebSocket 服务器,可以同时处理多个客户端请求。
- 数据库访问:处理复杂的 SQL 查询或与 NoSQL 数据库的交互,这类操作常常需要高效的 IO 操作。
安装说明
在 Python 3.3 及更高版本中,asyncio 是内置的标准库,无需额外安装。只需要在代码中进行导入即可:
用法举例
例子 1:异步网络请求
假设我们需要并发地发送 HTTP 请求,并获取响应。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import asyncio import aiohttp
async def fetch_url(session, url): async with session.get(url) as response: return await response.text()
async def main(urls): async with aiohttp.ClientSession() as session: tasks = [fetch_url(session, url) for url in urls] return await asyncio.gather(*tasks)
urls = ["https://example.com", "https://httpbin.org/get"]
results = asyncio.run(main(urls)) for url, content in zip(urls, results): print(f"Content from {url}: {content[:100]}")
|
例子 2:创建一个简单的 TCP 服务器
我们创建一个简单的 TCP 服务器,能够处理多个客户端请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| import asyncio
async def handle_client(reader, writer): data = await reader.read(100) message = data.decode() addr = writer.get_extra_info('peername') print(f"Received {message} from {addr}")
print("Send: %r" % message) writer.write(data) await writer.drain()
print("Close the connection") writer.close() await writer.wait_closed()
async def main(): server = await asyncio.start_server(handle_client, '127.0.0.1', 8888) async with server: await server.serve_forever()
asyncio.run(main())
|
例子 3:异步处理数据库操作
假设我们需要异步连接到一个数据库并执行查询操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import asyncio import asyncpg
async def fetch_data(): conn = await asyncpg.connect(user='user', password='password', database='test', host='127.0.0.1') rows = await conn.fetch('SELECT * FROM my_table') await conn.close() return rows
rows = asyncio.run(fetch_data()) for row in rows: print(row)
|
强烈建议大家关注我的博客 (全糖冲击博客),其中包含了完整的 Python 标准库使用教程,方便大家随时查询和学习。不仅如此,我还会定期更新关于最新编程技术与实践的文章,帮助您提高编程技能。不论您是初学者还是有经验的开发者,都可以在这里找到适合自己的内容。不要错过任何一个提升自己的机会,赶快关注我的博客吧!
软件版本可能变动
如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang