首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在多线程C应用程序中嵌入python

在多线程C应用程序中嵌入python
EN

Stack Overflow用户
提问于 2012-05-17 03:43:58
回答 4查看 7.1K关注 0票数 18

我将python解释器嵌入到一个多线程的C应用程序中,对于应该使用什么API来确保线程安全,我感到有点困惑。

据我所知,在嵌入python时,在调用任何其他Python C API调用之前,需要由嵌入器来处理GIL锁。这是通过以下函数完成的:

代码语言:javascript
复制
gstate = PyGILState_Ensure();
// do some python api calls, run python scripts
PyGILState_Release(gstate);

但仅有这一点似乎还不够。我仍然会遇到随机崩溃,因为它似乎没有为Python API提供互斥。

在阅读了更多的文档后,我还补充道:

代码语言:javascript
复制
PyEval_InitThreads();

就在调用Py_IsInitialized()之后,但这就是令人困惑的部分。文档中提到了这个函数:

初始化并获取全局解释器锁

这表明当此函数返回时,GIL应该是锁定的,并且应该以某种方式解锁。但在实践中,这似乎不是必需的。有了这行代码,我的多线程就可以很好地工作,并且PyGILState_Ensure/Release函数可以维护互斥。

当我尝试在PyEval_ReleaseLock()之后添加PyEval_ReleaseLock()时,应用程序在随后的PyImport_ExecCodeModule()调用中很快就死锁了。

那么我在这里错过了什么呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10625584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档