Python异步asyncio是否属并行?await执行机制相关技术疑问
关于asyncio纯计算异步函数的任务切换问题
先看你提供的代码:
async def task(): async def func(): '''takes forever to run the calculation, not doing requests''' return something result = await func()
问题解答
function1是否会在后台运行?
否,它不会在后台运行。关于单线程并发的后续疑问
你提到的“即便function1被‘暂停’,事件循环管理器仍会返回继续运行它(进行计算),检查计算是否完成”的说法是错误的。
Python的asyncio是单线程并发模型,事件循环能切换任务的关键在于当前任务主动让出CPU控制权——只有当任务遇到IO等待(比如网络请求、文件读写)或者调用asyncio.sleep()这类会触发切换的操作时,事件循环才会暂停当前任务,去执行其他就绪的任务。
但你的func是纯计算任务,没有任何能让事件循环挂起的操作。哪怕用了await,这个await也不会触发任务切换——事件循环会一直占用线程执行func的计算逻辑,直到它算出结果返回,期间完全不会处理其他任务(比如task2的function2)。只有等这个计算彻底完成后,事件循环才会去处理队列里的其他任务。
内容的提问来源于stack exchange,提问作者NickDxxD
相关产品推荐
相关产品推荐

