Python异步编程优雅实践

在这里插入图片描述
Python 异步编程是现代高效开发的重要技能,尤其在处理 I/O 密集型任务(如网络请求、文件操作)时表现出色。本文将从基础概念入手,逐步深入到高级实践,帮助读者掌握 asyncio 和 aiohttp 等核心工具,最终实现优雅的异步代码设计。无论您是初学者还是有一定经验的开发者,都能从中受益。

1. 什么是异步编程?

  • 同步 vs 异步
# 同步代码示例
import time

def task(name):
    print(f"Task {name} started.")
    time.sleep(2)  # 模拟耗时操作
    print(f"Task {name} finished.")

task("A")
task("B")
输出:

Task A started.
Task A finished.
Task B started.
Task B finished.
# 异步
async def say_hello():
    print("Hello")
    await asyncio.sleep(1)  # 模拟异步操作
    print("World")

# 运行协程
import asyncio
asyncio.run(say_hello())

2. Python 异步编程的核心概念

  • 协程 (Coroutine)
    定义:协程是一种可以暂停和恢复执行的函数。
    使用 async def 定义协程函数。
  • 事件循环是异步编程的核心,负责调度协程。
    示例:如何使用 asyncio.run() 启动事件循环。
  • await 关键字
    用于等待一个异步操作完成。
    注意事项:只能在 async 函数中使用。

3. asyncio 基础用法

async def task_a():
    print("Task A started")
    await asyncio.sleep(2)
    print("Task A finished")

async def task_b():
    print("Task B started")
    await asyncio.sleep(1)
    print("Task B finished")

async def main():
    task1 = asyncio.create_task(task_a())
    task2 = asyncio.create_task(task_b())
    await task1
    await task2

asyncio.run(main())
# asyncio.create_task() 创建并发任务。
# syncio.gather():并行运行多个协程。
# asyncio.wait():更灵活的任务管理。
#  aiohttp:异步 HTTP 请求
import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    urls = [
        "https://example.com",
        "https://httpbin.org/get",
    ]
    async with aiohttp.ClientSession() as session:
        tasks = [fetch(session, url) for url in urls]
        results = await asyncio.gather(*tasks)
        for i, result in enumerate(results):
            print(f"Result from URL {i+1}: {len(result)} bytes")

asyncio.run(main())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平时不搬砖

创造不易,请动动你发财的小手

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值