【问题标题】:How to use pybind11 in multithreaded application如何在多线程应用程序中使用 pybind11
【发布时间】:2018-04-28 19:30:17
【问题描述】:

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

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

【问题讨论】:

    标签: python c++ multithreading pybind11


    【解决方案1】:

    这行得通。用 gil_scoped_release 和 gil_scoped_acquire 包装长时间运行的 c++ 代码

    pybind11::gil_scoped_release release;
    
    while (true)
    {
        // do something and break
    }
    
    pybind11::gil_scoped_acquire acquire;
    

    【讨论】:

    • Pybind11 在 here 上有更多文档。
    【解决方案2】:

    如果您想执行以下操作 - 在 Python 中,您希望运行 C++ 线程以在每个线程上执行不同的任务。

    创建一个像https://github.com/progschj/ThreadPool这样的theradpool

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

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

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 1970-01-01
      • 2010-09-09
      • 2019-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多