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

2024-10-02 08:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在工作线程中运行Python。然而,我在worker池中得到奇怪的segfaults和死锁。如何正确地使用pybind11/pythoncapi来允许线程运行作业?在

我知道,由于GIL,它对mtpython没有多大意义,但是在找到更好的方法之前,这是一个适合当前体系结构的中间解决方案。在


Tags: 方法体系结构作业解决方案线程意义workerpybind11
2条回答

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

创建一个类似于https://github.com/progschj/ThreadPool的theradpool

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

免责声明-我没有尝试过,但这会起作用:)

这很管用。将长时间运行的c++代码包装为gil_scoped_release和gil_scoped_acquire

pybind11::gil_scoped_release release;

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

pybind11::gil_scoped_acquire acquire;

相关问题 更多 >

    热门问题