簡體   English   中英

在 python 中線程化 C++ 程序

[英]Threading a c++ program in python

我有一個用 Kivy 編寫的 Python 應用程序,它使用 C++ 程序進行高速計算,然后它返回一個值,我的 Python 應用程序使用它。

C++ 程序被包裹在 PyBind11 中並導入到應用程序中,然后從 Python 中調用。

我的問題是在執行 C++ 程序時,我的應用程序會停止一小會兒,但我仍然希望事情在后台進行。

我天真地認為這可以通過線程化 C++ 調用來解決,但轉念一想我認為問題在於 GIL。 我必須解鎖 GIL,我怎么能做到這一點?

在沒有看到任何代碼的情況下,我只能推斷您的 Python 代碼在執行其他任何操作之前正在等待 C++ 代碼完成。 這可能意味着以下任一項或兩項:

  • 你沒有在 C++ 代碼中解鎖 GIL

    • 根據Global Interpreter Lock (GIL) — Miscellaneous — pybind11 2.2.3 文檔,使用pybind ,這應該是這樣完成的:

       py::gil_scoped_release release; long_running_method(); py::gil_scoped_acquire acquire;

      請注意,您需要 GIL 來訪問任何 Python 機器(包括返回結果)。 因此,在發布之前,請確保將您需要的所有數據從 Python 類型轉換為 C++ 類型。

  • 您沒有任何其他活動的Python線程,因此在 C++ 調用正在進行時,沒有其他 Python 活動被編程來執行任何操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM