多个独立的嵌入式Python解释器在多个操作系统线程中被从C/C++程序调用

29

将Python解释器嵌入C/C++应用程序是有文档记录的。在从C/C++应用程序调用的多个操作系统线程上运行多个Python解释器的最佳方法是什么(即在同一进程中的一个操作系统线程上运行一个解释器)?这些应用程序可能还存在与内存碎片化和Py_Finalize()的限制相关的问题。

其中一种方法可以是以下内容:

  1. 在pyconfig.h中禁用Python线程和GIL,以保持简单(#undef WITH_THREAD)
  2. 将Python解释器源代码的所有可变全局变量移动到通过线程本地存储引用的堆分配结构中(参考:Python on a Phone)。

我的问题是:

  1. 是否有更好的方法?
  2. 是否有任何工具可以自动将Python解释器源代码的全局变量转换为通过TLS(线程本地存储)引用的堆分配结构?

类似的主题在此处讨论:


6
仅有多个内嵌Python解释器是最优解的问题集非常少。在花费太多时间和精力进行这方面工作之前,务必确保多进程、消息传递的解决方案不可行。 - Rakis
当你说“OS”时,你可能是指“进程”吗?如果是这样的话,shell的&几乎可以满足你的所有需求。操作系统通常在进程级别上工作。如果你的意思是“进程”,请纠正你的问题。如果你真的认为你的意思是“线程”,请解释一下为什么你认为操作系统的线程如此重要。 - S.Lott
1个回答

5

这不完全是对你问题的回答,但你可以使用单独的进程代替线程,那么问题应该就会消失。

优点:

  • 无需修改Python代码(并确保在所有预期情况下结果都有效)
  • 总体开发工作量可能更少
  • 易于升级到新的Python版本
  • 不同进程之间有明确定义的接口,因此更容易正确编写和调试

缺点:

如果你使用共享内存进行IPC,则生成的应用程序代码与使用线程时不会有太大区别。

鉴于一些人主张始终使用进程而非线程,如果它在任何方面符合你的约束条件,我至少会考虑将其作为一种替代方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接