15.8 C和Python中的线程混用

    如果你想将C、Python和线程混合在一起,你需要确保正确的初始化和管理Python的全局解释器锁(GIL)。要想这样做,可以将下列代码放到你的C代码中并确保它在任何线程被创建之前被调用。

    1. /* Make sure we own the GIL */
    2. PyGILState_STATE state = PyGILState_Ensure();
    3.  
    4. ...
    5. /* Restore previous GIL state and return */
    6. PyGILState_Release(state);

    每次调用 都要相应的调用 .

    要注意的是调用 并不会立刻抢占或中断解释器。如果有其他代码正在执行,这个函数被中断知道那个执行代码释放掉GIL。在内部,解释器会执行周期性的线程切换,因此如果其他线程在执行,调用者最终还是可以运行的(尽管可能要先等一会)。