2024-10-02 08:27:37 发布
网友
我想在工作线程中运行Python。然而,我在worker池中得到奇怪的segfaults和死锁。如何正确地使用pybind11/pythoncapi来允许线程运行作业?在
我知道,由于GIL,它对mtpython没有多大意义,但是在找到更好的方法之前,这是一个适合当前体系结构的中间解决方案。在
如果你想做以下事情- 从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;
如果你想做以下事情- 从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;
相关问题 更多 >
编程相关推荐