Python 基础入门 Day11

Python 基础入门 Day11

欢迎来到 Python 基础入门 Day11!经过前十天的学习,相信你已经掌握了 Python 的基础语法、数据结构、函数、面向对象编程,以及多线程与多进程的应用。今天,我们将进一步探索 Python 异步编程(Asyncio) 的奥秘,让你的程序变得更加高效!

在开始之前,可以回顾之前的内容:


目录

  1. 异步编程的优势
  2. Python 中的 asyncio 模块
  3. 使用 asyncawait 关键字
  4. 创建异步任务
  5. 异步 I/O 操作示例
  6. 小结与练习

一、异步编程的优势

1.1 什么是异步编程?

异步编程是一种编写非阻塞代码的方式,它允许程序在等待 I/O 操作(如文件读写、网络请求等)时,继续执行其他任务。相比传统的同步编程,异步编程可以更有效地利用系统资源,提升程序的响应速度。

1.2 异步编程的优势

  • 提高程序性能:尤其适用于 I/O 密集型任务,如网络爬虫、文件下载等。
  • 减少程序等待时间:通过异步操作,避免因阻塞而浪费时间。
  • 提升用户体验:在 Web 开发中,异步编程可以减少页面加载时间,提升用户交互体验。

二、Python 中的 asyncio 模块

Python 的 asyncio 模块是一个强大的工具,用于编写异步代码。它提供了事件循环、任务调度、协程等功能。

2.1 导入 asyncio 模块

import asyncio


三、使用 asyncawait 关键字

3.1 什么是协程(Coroutine)?

协程是 Python 中一种特殊的函数,通过 async def 语法定义。协程是可以被暂停并在需要时恢复的函数。

3.2 示例:定义异步函数

import asyncio async def say_hello(): print("Hello, World!") await asyncio.sleep(1) print("Goodbye, World!") # 运行协程 asyncio.run(say_hello())

输出:

Hello, World! (暂停 1 秒) Goodbye, World!


四、创建异步任务

4.1 使用 asyncio.create_task()

asyncio.create_task() 可以并发执行多个协程。

import asyncio async def greet(name): print(f"Hello, {name}") await asyncio.sleep(1) print(f"Goodbye, {name}") async def main(): task1 = asyncio.create_task(greet("Alice")) task2 = asyncio.create_task(greet("Bob")) await task1 await task2 asyncio.run(main())

输出:

Hello, Alice Hello, Bob (暂停 1 秒) Goodbye, Alice Goodbye, Bob

4.2 并行执行多个任务

异步任务可以并行执行,而不必等待其他任务完成。上面的示例展示了多个协程同时开始,并在等待时释放控制权,让其他任务得以执行。


五、异步 I/O 操作示例

5.1 异步 HTTP 请求

使用 aiohttp 库实现异步 HTTP 请求(需先安装:pip install aiohttp)。

import asyncio import aiohttp async def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() async def main(): url = 'https://www.example.com' html = await fetch(url) print(html) asyncio.run(main())

5.2 异步文件操作

import asyncio async def write_file(): with open("example.txt", "w") as f: f.write("Hello, Async World!") asyncio.run(write_file())


六、小结与练习

今天我们学习了 Python 的 异步编程,掌握了 asyncio 的基本用法。异步编程在处理 I/O 密集型任务时能显著提升性能,希望你能够将这些知识运用到实际项目中。

今日练习题:

  1. 使用 asyncio 编写一个并发网络请求的爬虫程序。
  2. 使用 aiohttp 实现并发下载多个文件。
  3. 编写一个异步函数,模拟多个任务的执行并统计总耗时。

下一节预告:在 Day12 中,我们将继续探讨 Python 的网络编程(Socket),带你了解如何创建服务器和客户端。敬请期待!

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注