是asyncio的执行器中的循环运行线程安全?

2024-10-01 13:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试asyncio,必须将其与一些普通的多线程阻塞代码混合使用,因此我需要使用run_in_exector来卸载执行。在

asyncio docs warn that "most functions" aren't threadsafe,而{}是唯一的线程安全函数。还有一些其他的,比如Future.add_done_callback,也被显式地记录为线程安全的。然后它会有一个句子说“你可以使用run-unu-in-executor在其他线程中运行回调”,但没有具体评论它的线程安全性。在

run_in_executor不是线程安全的,但是看看源代码,如果选择正确的代码路径,它看起来是线程安全的。在

有人知道它是否应该是线程安全的,但是没有文档证明是这样的吗?在


Tags: 函数run代码inasynciodocsmostthat
3条回答

根据规范run_in_executor应该是非线程安全的(抱歉,它看起来像是隐式语句,可能应该在PEP-3156中加以澄清)。在

即使具体的实现是线程安全的,也不要假设任何符合PEP-3156的实现也是线程安全的。在

我认为这完全取决于你给它什么。它只会有效地启动一个线程并运行您的代码,所以这是否是线程安全的取决于您告诉它做什么。在

如果executor参数不是None或者已经设置了默认的executor(调用loop.set_default_执行器()). 否则,可能会创建两个执行器。在

您可以编写一个补丁来使方法线程安全;-)

相关问题 更多 >