开发者社区> 问答> 正文

从C扩展中释放全局锁

你想让C扩展代码和Python解释器中的其他进程一起正确的执行, 那么你就需要去释放并重新获取全局解释器锁(GIL)。

展开
收起
哦哦喔 2020-04-17 18:12:48 2325 0
2 条回答
写回答
取消 提交回答
  • 有点尴尬唉 你要寻找的东西已经被吃掉啦!

    PyObject *pyfunc(PyObject *self, PyObject *args) { ... Py_BEGIN_ALLOW_THREADS // Threaded C code. Must not use Python API functions ... Py_END_ALLOW_THREADS ... return result; }

    2020-04-17 23:58:23
    赞同 展开评论 打赏
  • 在C扩展代码中,GIL可以通过在代码中插入下面这样的宏来释放和重新获取:
    
    #include "Python.h"
    ...
    
    PyObject *pyfunc(PyObject *self, PyObject *args) {
       ...
       Py_BEGIN_ALLOW_THREADS
       // Threaded C code.  Must not use Python API functions
       ...
       Py_END_ALLOW_THREADS
       ...
       return result;
    }
    
    2020-04-17 18:12:58
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
事务、全局索引、透明分布式 立即下载
对象的生命期管理 立即下载
低代码开发师(初级)实战教程 立即下载

相关实验场景

更多