python 协程并发的代码
时间: 2023-09-13 14:05:29 浏览: 143
### 回答1:
这是一段使用 Python 协程实现并发的示例代码:
```
import asyncio
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
print(f"started at {time.strftime('%X')}")
await say_after(1, 'hello')
await say_after(2, 'world')
print(f"finished at {time.strftime('%X')}")
await main()
```
这段代码会在 1 秒后输出 "hello",在 2 秒后输出 "world",最后输出 "finished at HH:MM:SS"。
注意,这段代码需要在使用 `asyncio` 库的事件循环中运行。如果你没有在事件循环中运行,那么可以使用 `asyncio.run(main())` 来运行。
### 回答2:
协程是一种轻量级的线程管理方式,能够实现并发执行的效果。在Python中,可以通过asyncio模块来编写协程代码。
下面是一个简单的协程并发的代码示例:
```python
import asyncio
async def task1():
for i in range(5):
print(f"Task 1 is running, count: {i}")
await asyncio.sleep(1) # 模拟耗时操作
async def task2():
for i in range(5):
print(f"Task 2 is running, count: {i}")
await asyncio.sleep(1) # 模拟耗时操作
async def main():
await asyncio.gather(task1(), task2()) # 并发执行task1和task2
asyncio.run(main())
```
上述代码定义了两个协程任务`task1`和`task2`,分别打印输出任务执行的次数,并使用`await asyncio.sleep(1)`模拟了每次执行耗时1秒的操作。
在`main`函数中,通过`asyncio.gather()`方法将`task1`和`task2`并发执行起来。最后,使用`asyncio.run()`来运行`main`函数。
执行上述代码后,可以看到两个任务交替执行,每个任务每秒打印一次计数。
协程能够实现并发执行的效果,是因为在遇到`await`关键字时会释放CPU,让其他协程有机会运行,从而达到并发的效果。
### 回答3:
协程是一种轻量级的并发编程的方式,可以在同一个线程中实现多个任务之间的切换,提高程序的执行效率。
在Python中,可以使用asyncio模块来创建和管理协程。下面是一个简单的协程并发的代码示例:
```python
import asyncio
# 协程函数1
async def coroutine1():
print('协程1开始执行')
await asyncio.sleep(1) # 模拟耗时操作
print('协程1执行结束')
# 协程函数2
async def coroutine2():
print('协程2开始执行')
await asyncio.sleep(2) # 模拟耗时操作
print('协程2执行结束')
# 协程函数3
async def coroutine3():
print('协程3开始执行')
await asyncio.sleep(3) # 模拟耗时操作
print('协程3执行结束')
# 创建事件循环
loop = asyncio.get_event_loop()
# 将多个协程函数加入事件循环,并发执行
loop.run_until_complete(asyncio.gather(coroutine1(), coroutine2(), coroutine3()))
# 关闭事件循环
loop.close()
```
在上述示例代码中,首先定义了三个协程函数coroutine1、coroutine2和coroutine3,分别模拟了耗时操作。然后通过asyncio模块的get_event_loop()函数获取事件循环对象,再使用run_until_complete()方法来执行多个协程函数,并发地执行它们。最后通过close()方法关闭事件循环。
运行以上代码,可以看到三个协程函数会交替执行,每个协程函数的执行时间不同。这样就实现了在同一个线程中多个任务之间的切换。
阅读全文