Python协程调度实例代码分析
2025-04-28 23:33
Python
SQL Server
Oracle
MySQL
PostgreSQL
NoSQL
大数据
其他数据库
Windows
Windows Server
Linux
macOS
嵌入式
APACHE
NGINX
redis
Docker
git
互联网
tomcat
Html/Css
JavaScript
jQuery
HTML5
Angular
React
Vue
小程序
架构设计
面向对象
设计模式
领域驱动设计
Android开发
iOS开发
Flutter
鸿蒙
其他手机开发
敏捷开发
项目与团队管理
软件工程其他
.NET
Java
Python
Go
PHP
C++
Ruby
Swift
C语言
Erlang
Delphi
Scala
R语言
Verilog
Dart
Rust
其他语言
asp
nodejs
读书区
翻译区
求职面试
计算机图形学
软件测试
菜谱
SEO技术
摄影
生活技巧
26
0
0
0
标题录入
封面图
在 Python 中,协程是一种用于异步编程的工具。它允许你在单线程中实现并发操作,通过 `async` 和 `await` 关键字来定义和使用协程。下面是一个简单的协程调度实例代码,并对其进行详细分析。 ### 实例代码 ```python import asyncio # 定义一个协程函数 async def say_after(delay, what): await asyncio.sleep(delay) # 模拟异步操作 print(what) # 定义主协程函数 async def main(): task1 = asyncio.create_task(say_after(2, 'Hello')) # 创建任务1 task2 = asyncio.create_task(say_after(1, 'World')) # 创建任务2 print(f"Started at {asyncio.get_running_loop().time()}") # 等待两个任务完成 await task1 await task2 print(f"Finished at {asyncio.get_running_loop().time()}") # 运行主协程 asyncio.run(main()) ``` ### 代码分析 #### 1. 导入模块 ```python import asyncio ``` - `asyncio` 是 Python 标准库中用于异步编程的核心模块。 - 它提供了事件循环、协程、任务等工具,是实现异步操作的基础。 --- #### 2. 定义协程函数 ```python async def say_after(delay, what): await asyncio.sleep(delay) print(what) ``` - `say_after` 是一个协程函数,使用了 `async def` 定义。 - 协程函数内部可以包含 `await` 表达式,表示挂起当前协程并等待某个异步操作完成。 - 在这里,`await asyncio.sleep(delay)` 模拟了一个耗时操作(如 I/O 或延迟)。 - 当 `sleep` 完成后,协程继续执行并打印 `what`。 --- #### 3. 定义主协程函数 ```python async def main(): task1 = asyncio.create_task(say_after(2, 'Hello')) task2 = asyncio.create_task(say_after(1, 'World')) print(f"Started at {asyncio.get_running_loop().time()}") await task1 await task2 print(f"Finished at {asyncio.get_running_loop().time()}") ``` - `main` 是主协程函数,负责调度其他协程。 - 使用 `asyncio.create_task()` 将 `say_after` 函数包装为任务对象(Task)。任务对象可以独立运行,并由事件循环管理。 - `task1` 和 `task2` 分别对应两个协程任务,它们会并发执行: - `task1` 延迟 2 秒后打印 `'Hello'`。 - `task2` 延迟 1 秒后打印 `'World'`。 - `await` 用于等待任务完成。尽管 `task2` 的延迟时间较短,但由于协程调度机制,它会在 `task1` 执行完成后继续执行。 --- #### 4. 运行主协程 ```python asyncio.run(main()) ``` - `asyncio.run()` 是 Python 提供的一个高阶 API,用于运行顶层协程并启动事件循环。 - 它会自动创建事件循环、运行 `main` 协程,并关闭事件循环。 --- ### 输出结果 假设当前时间为 `0`,运行上述代码可能输出如下内容: ``` Started at 0.0 Hello World Finished at 2.0 ``` **解释:** - 主协程在 `0.0` 时开始运行。 - `task2` 先完成并打印 `'World'`。 - 随后 `task1` 完成并打印 `'Hello'`。 - 最后主协程结束,打印 `Finished at 2.0`。 --- ### 关键点总结 1. **协程与任务的区别**: - 协程是一个函数,使用 `async def` 定义。 - 任务是协程的实例化对象,通过 `asyncio.create_task()` 创建。 2. **事件循环的作用**: - 事件循环是异步编程的核心,负责调度协程和任务。 - `asyncio.run()` 自动管理事件循环。 3. **并发 vs 并行**: - 协程实现了并发,而非并行。所有协程共享同一个线程资源。 - `asyncio.sleep()` 是一个典型的异步操作,模拟了阻塞行为但不会真正占用 CPU。 通过这个例子,我们可以看到 Python 的协程如何优雅地处理并发任务,而无需显式创建多线程或进程。
上一篇:
Django---启动admin的报no such table: auth_user错误
下一篇:
Python修改列表元素的方法
标题录入,一次不能超过6条
怎么运用逻辑思维进行推理?
T:0.009216s,M:288.52 KB
返回顶部
留言
留言
评论