如何在多线程应用程序中使用pybind11

时间:2017-11-15 14:14:54

标签: python c++ multithreading pybind11

我想在工作线程中运行Python。但是我在工作池中遇到奇怪的段错误和线程死锁。如何正确使用pybind11 / Python C API来允许线程运行作业?

我知道由于GIL对MT python没有多大意义,但这是一个适合当前架构的中间解决方案,直到有更好的方法。

2 个答案:

答案 0 :(得分:0)

如果你想做以下事项 - 从Python开始,您希望运行C ++线程以在每个线程上执行不同的任务。

创建像https://github.com/progschj/ThreadPool

这样的theradpool

使用PyBind11编写一个包装类来包装和绑定到Python。 创建ThreadPool的实例并从Python添加任务,然后创建不同的线程来执行任务。

免责声明 - 我没有尝试,但这将有效:)

答案 1 :(得分:0)

这有效。使用gil_scoped_release和gil_scoped_acquire包装长时间运行的c ++代码

pybind11::gil_scoped_release release;

while (true) { // do something and break }

pybind11::gil_scoped_acquire acquire;