在协程中使用 time.sleep() 会导致阻塞,影响协程的并发性能。以下是主要原因:
阻塞事件循环:
time.sleep() 是同步阻塞调用,会暂停整个线程,导致事件循环无法处理其他任务,降低并发效率。
无法挂起协程:
协程依赖 await 挂起并让出控制权,而 time.sleep() 不会挂起协程,导致事件循环无法调度其他任务。
异步替代方案:
应使用 asyncio.sleep(),它是非阻塞的,允许事件循环在等待期间处理其他任务。
示例
错误用法:
python
复制
import time
import asyncio
async def my_coroutine():
print("Start")
time.sleep(5) # 阻塞
print("End")
asyncio.run(my_coroutine())
正确用法:
python
复制
import asyncio
async def my_coroutine():
print("Start")
await asyncio.sleep(5) # 非阻塞
print("End")
asyncio.run(my_coroutine())
总结
避免使用 time.sleep(),因为它会阻塞事件循环。
使用 asyncio.sleep(),以保持协程的非阻塞特性。