28

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

一种这样的方法可以是:

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

我的问题是:

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

这里讨论了类似的主题:

4

1 回答 1

5

这不完全是您问题的答案,但您可以使用单独的进程而不是线程,那么问题应该会消失。

优点:

  • 无需破解 python(并确保结果在所有预期情况下都有效)
  • 总体上可能会减少开发工作
  • 轻松升级到新的 python 版本
  • 明确定义不同进程之间的接口,从而更容易正确和调试

缺点:

如果您为 IPC 使用共享内存,则生成的应用程序代码不应与使用线程获得的代码相差太大。

鉴于有些人认为您应该始终使用 processes over threads,如果它以任何方式符合您的约束,我至少会认为它是一种替代方法。

于 2011-01-17T11:59:38.533 回答