我有一个用 C++ 编写的库,我使用 SWIG 对其进行包装并在 python 中使用。一般来说,只有一个类,方法很少。问题是调用这些方法可能很耗时 - 它们可能会挂起我的应用程序(调用这些方法时不会释放 GIL)。所以我的问题是:
为这些方法调用释放 GIL 最简单的方法是什么?
(我知道如果我使用 C 库,我可以用一些额外的 C 代码来包装它,但这里我使用 C++ 和类)
不知道 SWIG 是什么,无论如何我都会尝试回答:)
使用类似的方法来释放/获取 GIL:
class GILReleaser {
GILReleaser() : save(PyEval_SaveThread()) {}
~GILReleaser() {
PyEval_RestoreThread(save);
}
PyThreadState* save;
};
在您选择的代码块中,利用 RAII 来释放/获取 GIL:
{
GILReleaser releaser;
// ... Do stuff ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)