gpt4 book ai didi

c++ - 在 C++ 代码中释放 Python GIL

转载 作者:太空狗 更新时间:2023-10-29 21:23:13 26 4
gpt4 key购买 nike

我有一个用 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 ...
}

关于c++ - 在 C++ 代码中释放 Python GIL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com