我正在尝试asyncio,必须将其与一些普通的多线程阻塞代码混合使用,因此我需要使用run_in_exector来卸载执行。在
asyncio docs warn that "most functions" aren't threadsafe,而{Future.add_done_callback
,也被显式地记录为线程安全的。然后它会有一个句子说“你可以使用run-unu-in-executor在其他线程中运行回调”,但没有具体评论它的线程安全性。在
run_in_executor不是线程安全的,但是看看源代码,如果选择正确的代码路径,它看起来是线程安全的。在
有人知道它是否应该是线程安全的,但是没有文档证明是这样的吗?在
根据规范,
run_in_executor
应该是非线程安全的(抱歉,它看起来像是隐式语句,可能应该在PEP-3156中加以澄清)。在即使具体的实现是线程安全的,也不要假设任何符合PEP-3156的实现也是线程安全的。在
我认为这完全取决于你给它什么。它只会有效地启动一个线程并运行您的代码,所以这是否是线程安全的取决于您告诉它做什么。在
如果executor参数不是None或者已经设置了默认的executor(调用loop.set_default_执行器()). 否则,可能会创建两个执行器。在
您可以编写一个补丁来使方法线程安全;-)
相关问题 更多 >
编程相关推荐