Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是异步的';s loop.run_in_执行器线程安全?_Python_Thread Safety_Python Asyncio - Fatal编程技术网

Python 是异步的';s loop.run_in_执行器线程安全?

Python 是异步的';s loop.run_in_执行器线程安全?,python,thread-safety,python-asyncio,Python,Thread Safety,Python Asyncio,我正在尝试asyncio,必须将它与一些普通的多线程阻塞代码混合使用,因此我需要使用run_in_exector卸载执行 是的,call\u soon\u threadsafe是唯一的线程安全函数。还有一些其他的,比如Future.add\u done\u callback,它们被明确地记录为线程安全的。之后它有一句话说“您可以使用run_in_executor在其他线程中运行回调”,但没有具体说明它的线程安全性 文档不是线程安全的,但是从源代码看,如果采用了正确的代码路径,它看起来是线程安全的

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

是的,
call\u soon\u threadsafe
是唯一的线程安全函数。还有一些其他的,比如
Future.add\u done\u callback
,它们被明确地记录为线程安全的。之后它有一句话说“您可以使用run_in_executor在其他线程中运行回调”,但没有具体说明它的线程安全性

文档不是线程安全的,但是从源代码看,如果采用了正确的代码路径,它看起来是线程安全的


有没有人知道它是否应该是线程安全的,只是没有文档证明它是线程安全的?

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

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


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

如果executor参数不是None或默认executor已经设置(call loop.set_default_executor()),则默认实现看起来是线程安全的。否则,可能会创建两个执行器


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

在这种情况下,“线程安全”是什么意思?文档使用该术语指示从运行
asyncio
事件循环的线程之外的线程调用给定方法是否安全。这可能不是你要问的,是吗?这正是我的意思。我有一些现有的多线程代码,正在尝试使用asyncio,因此我需要一种线程安全的方法来调度阻塞代码。使其(或任何)线程安全的正确方法是将其包装在call_soon_threadsafe:
循环中。call_soon_threadsafe(loop.run_in_executor,executor,callback,*args))