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

时间:2010-06-03 17:25:39

标签: python thread-local python-embedding

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

其中一种方法如下:

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

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

1 个答案:

答案 0 :(得分:2)

这不是你问题的答案,但是你可以使用单独的进程而不是线程,然后问题就会消失。

优点:

  • 不需要黑客python(并确保结果适用于所有预期的情况)
  • 可能整体开发工作量减少
  • 轻松升级到新的python版本
  • 明确定义不同进程之间的接口,从而更容易正确和调试

缺点:

如果对IPC使用共享内存,那么生成的应用程序代码与使用线程的内容不会有太大差异。

鉴于有些人在争论你应该永远use processes over threads,如果它以任何方式适合你的约束,我至少会认为它是另一种选择。