开发者社区> 问答> 正文

C和Python中的线程混用

你有一个程序需要混合使用C、Python和线程, 有些线程是在C中创建的,超出了Python解释器的控制范围。 并且一些线程还使用了Python C API中的函数。

展开
收起
哦哦喔 2020-04-17 18:13:10 2233 0
1 条回答
写回答
取消 提交回答
  • 如果你想将C、Python和线程混合在一起,你需要确保正确的初始化和管理Python的全局解释器锁(GIL)。 要想这样做,可以将下列代码放到你的C代码中并确保它在任何线程被创建之前被调用。
    
    #include <Python.h>
      ...
      if (!PyEval_ThreadsInitialized()) {
        PyEval_InitThreads();
      }
      ...
    对于任何调用Python对象或Python C API的C代码,确保你首先已经正确地获取和释放了GIL。 这可以用 PyGILState_Ensure() 和 PyGILState_Release() 来做到,如下所示:
    
    ...
    /* Make sure we own the GIL */
    PyGILState_STATE state = PyGILState_Ensure();
    
    /* Use functions in the interpreter */
    ...
    /* Restore previous GIL state and return */
    PyGILState_Release(state);
    ...
    每次调用 PyGILState_Ensure() 都要相应的调用 PyGILState_Release() .
    
    2020-04-17 18:13:19
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载