首页 新闻 会员 周边 捐助

在使用 asyncio 编写高并发服务时,不可避免需要调用一个阻塞型第三方库(无法替换为异步版本)。为了尽量减少对事件循环的影响,最合适的做法是?

0
[已关闭问题] 关闭于 2025-11-27 17:52
A
使用线程池将阻塞调用移出事件循环,例如通过 asyncio.to_thread(...) 或 loop.run_in_executor(...) 提交执行
B
在协程中直接调用该函数,但用 try/except 捕获异常即可
C
在调用前增加 asyncio.sleep(0) 主动让出控制权后再调用
D
提高事件循环的调度频率或打开 debug 以缩短阻塞影响
*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1152
提问于:2025-11-27 16:14
< >
分享
所有回答(1)
0
正确答案:A
官方解析:
在 asyncio 高并发服务中,阻塞调用会阻塞事件循环,严重影响性能。使用线程池(如通过 asyncio.to_thread 或 loop.run_in_executor)将阻塞调用移出事件循环是标准做法,能最大限度减少对事件循环的影响。选项B的协程中直接调用仍会阻塞事件循环;选项C的 asyncio.sleep(0) 仅短暂让出控制权,但阻塞调用执行期间事件循环仍被阻塞;选项D提高调度频率或打开 debug 无法根本解决阻塞问题,反而可能增加开销。因此,A 是最合适的做法。
知识点:Python
*Tesla* | 园豆:1152 (小虾三级) | 2025-11-27 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册