Python GIL:并发 C++ 嵌入
Posted
技术标签:
【中文标题】Python GIL:并发 C++ 嵌入【英文标题】:Python GIL: concurrent C++ embed 【发布时间】:2014-08-20 08:50:42 【问题描述】:python嵌入到c++中可以让你同时运行n个python脚本吗?
我目前正在处理 GIL 的恐惧。我的项目需要至少 2 个线程的并发性,而在 Python 中轻松输入确实有助于简化代码。
是否会将我的 Python 代码嵌入到处理线程的 C++ 脚本中以规避 GIL 导致的问题?
【问题讨论】:
【参考方案1】:python嵌入到c++中可以让你同时运行n个python脚本吗?
您无需执行任何操作即可同时运行多个 Python 脚本。 GIL 对于解释器来说是本地的,因此如果您运行多个解释器进程,GIL 不会阻止它们同时执行。
如果这是一个错字并且您的意思是 threads 那么是的,您可以从 Python 调用 C 或 C++ 代码来绕过 GIL。相关 API 详情请见Thread State and the Global Interpreter Lock。
【讨论】:
【参考方案2】:仅当您产生单独的解释器时。 GIL 是一个解释器策略,用于保护解释器内部结构。一位解释器一次运行一行。
唯一的另一种方法是用纯 C++ 编写至少一个线程,并为你的 python 脚本提供通信队列 API 或任何真正异步通信的方式。
【讨论】:
我不相信第二段是正确的。 C++ 扩展可以释放 GIL,从而实现与其他类似线程和 Python 解释器线程的并发。以上是关于Python GIL:并发 C++ 嵌入的主要内容,如果未能解决你的问题,请参考以下文章
Python并发编程05/ 死锁/递归锁/信号量/GIL锁/进程池/线程池
python 复习—并发编程系统并发线程和进程协程GIL锁CPU/IO密集型计算