推荐答案
// www.javascriptcn.com code example
import asyncio
async def my_coroutine():
print("协程开始")
await asyncio.sleep(1)
print("协程结束")
async def main():
await asyncio.gather(my_coroutine(), my_coroutine(), my_coroutine())
asyncio.run(main())本题详细解读
协程的概念
协程(Coroutine)是一种轻量级的线程,允许在单线程中实现并发操作。与线程不同,协程的切换是由程序显式控制的,而不是由操作系统调度。协程通过 await 关键字挂起当前任务,并在适当的时候恢复执行。
协程的用法
定义协程函数:使用
async def关键字定义协程函数。例如:async def my_coroutine(): print("协程开始") await asyncio.sleep(1) print("协程结束")调用协程:协程函数不能直接调用,必须通过
await关键字或在事件循环中运行。例如:await my_coroutine()
事件循环:协程的执行依赖于事件循环(Event Loop)。可以使用
asyncio.run()来运行协程。例如:asyncio.run(my_coroutine())
并发执行多个协程:可以使用
asyncio.gather()来并发执行多个协程。例如:async def main(): await asyncio.gather(my_coroutine(), my_coroutine(), my_coroutine()) asyncio.run(main())
协程的优势
- 高效:协程的切换开销远小于线程切换。
- 可控:协程的调度由程序显式控制,避免了线程竞争和锁的问题。
- 异步编程:协程非常适合处理 I/O 密集型任务,如网络请求、文件读写等。
协程的注意事项
- 阻塞操作:在协程中执行阻塞操作(如
time.sleep())会阻塞整个事件循环,应使用await asyncio.sleep()替代。 - 异常处理:协程中的异常需要通过
try-except块捕获,否则会导致事件循环停止。
通过以上内容,你应该能够理解 Python 中协程的基本概念和用法,并能够在实际项目中应用协程来实现高效的并发编程。