python协程举例
时间: 2025-05-14 07:36:09 浏览: 20
### Python 协程的使用示例
Python 协程是一种用于异步编程的技术,能够显著提高程序性能并简化复杂逻辑。以下是关于如何使用 `asyncio` 和协程的一个具体实例。
#### 创建和运行简单的协程
通过定义带有关键字 `async def` 的函数来创建协程对象。下面是一个基本的例子:
```python
import asyncio
async def say_hello():
await asyncio.sleep(1) # 模拟耗时操作
print("Hello, world!")
# 运行协程
asyncio.run(say_hello())
```
上述代码展示了如何定义一个简单的协程以及如何利用 `asyncio.run()` 来执行它[^3]。
#### 并发执行多个协程
为了并发执行多个任务,可以使用 `asyncio.gather()` 方法。以下是一段模拟从多个 URL 获取数据的代码片段:
```python
import asyncio
async def fetch_url(url):
print(f"Fetching: {url}")
await asyncio.sleep(2) # 假设这是网络请求的时间消耗
print(f"Done: {url}, Status: 200")
async def main():
urls = [
"https://example.com",
"https://www.python.org",
"https://www.github.com"
]
tasks = [fetch_url(url) for url in urls]
await asyncio.gather(*tasks)
# 执行主函数
asyncio.run(main())
```
此代码实现了对三个不同网址的同时访问,并等待所有任务完成后再继续后续流程[^1]。
#### 将协程转换为 Task 对象
如果希望更灵活地管理协程,则可将其显式转化为 Task 对象以便于调度与监控状态变化。例如:
```python
import asyncio
async def count_down(name, delay):
while True:
await asyncio.sleep(delay)
print(f"{name}: Ticking...")
async def main():
loop = asyncio.get_event_loop()
task1 = loop.create_task(count_down("Task A", 1))
task2 = loop.create_task(count_down("Task B", 2))
await asyncio.sleep(5) # 让计数器运行一段时间
task1.cancel() # 取消第一个任务
task2.cancel()
try:
await asyncio.wait([task1, task2])
except asyncio.CancelledError:
pass
print("All done.")
# 启动事件循环
asyncio.run(main())
```
这里演示了如何通过调用 `loop.create_task()` 或者 `ensure_future()` 函数把普通的协程封装成独立的任务单元。
---
###
阅读全文
相关推荐


















