运行兼容嵌入在C ++中的python脚本

时间:2016-12-18 14:44:56

标签: python c++

是否可以运行脚本,即。 PyRun_SimpleFile()在单独的C ++线程中,以便它们同时运行?

我怀疑没有因为GIL。但如果有任何诀窍可以告诉你。

最诚挚的问候 雅各布

1 个答案:

答案 0 :(得分:4)

您可以同时运行它们,但GIL会阻止它们并行运行并充分利用您的多个CPU内核。如果您主要调度到其他长时间运行的C ++ / CUDA代码,再次释放GIL并且只有几个CPU,那么这就足够了。

这将是Sub-Interpreters采用的方法,多个大多数独立的python解释器只共享一些部分,但遗憾的是这包括GIL,因此它对并行处理没有任何好处,只有很小的好处可以隔离同时运行scrips。这种方法的一个例子是mod_wsgi

子解释器是一种很少使用的功能,所以期望在C扩展中出现奇怪的错误/竞争条件而不期望它们。

如果您说C#或Java而不是C ++,您可以使用IronPython或Jython来实现您的目标,因为那些没有GIL。

使用CPython,您只能安全地进行多处理。多处理模块回避了GIL的设计问题,只是启动了一个额外的进程,但如果你有昂贵的共享内存结构而没有fork()系统调用,则无法提供。

当然,如果您开始破解python实现本身,您可能能够将所有全局状态隔离到较小的上下文中。但是如果你这样做,你也可以使用专为这个多线程嵌入用例设计的语言,例如Tcl(查看NaviServer或F5s irules)或{{1 }}