asyncio.run_in_executor 是多线程的吗?
Posted
技术标签:
【中文标题】asyncio.run_in_executor 是多线程的吗?【英文标题】:Is asyncio.run_in_executor multithreading? 【发布时间】:2020-09-22 09:42:43 【问题描述】:事件循环是线程特定的,因为 asyncio 是关于使用单线程的协作多任务处理。所以我不明白asyncio.run_in_exceutor
是如何与ThreadPoolExcecutor
一起工作的?
【问题讨论】:
这正是重点,run_in_executor
允许您在事件循环之外运行代码(使用您选择的执行程序)。你的问题是关于这个功能的目的还是它的技术方面?
@Vincent 谢谢你的评论,我想知道这个函数的用途
【参考方案1】:
我想知道函数的用途
loop.run_in_executor awaitable 有两个主要用例:
执行无法通过选择器循环的文件描述符接口管理的 I/O 操作(即使用 loop.add/remove_reader 方法)。这种情况偶尔会发生,看看loop.getaddrinfo 的code 如何在后台使用loop.run_in_executor
。
执行繁重的 CPU 操作会阻塞事件循环上下文切换机制太久。有很多合法的用例,例如在异步应用程序的上下文中运行一些数据处理任务。
【讨论】:
以上是关于asyncio.run_in_executor 是多线程的吗?的主要内容,如果未能解决你的问题,请参考以下文章