在Python中线程C 程序

Threading a c++ program in python

本文关键字:程序 线程 Python      更新时间:2023-10-16

我有一个用kivy编写的python应用程序,该应用程序使用C 程序进行高速计算,然后返回一个值,而我的Python应用程序使用了。

C 程序包裹在PYBIND11中并导入应用程序,然后从Python调用。

我的问题是当执行C 程序时,我的应用程序停止了一段时间,我仍然希望在后台进行事情。

我天真地认为这可以通过螺纹C 调用来解决,但是在第二个想法上,我认为问题在于GIL。我必须解锁吉尔,如何实现?

而无需看到任何代码,我只能推断出您的Python代码正在等待C 代码在执行其他任何操作之前完成。这可能意味着以下任务:

  • 您没有在C 代码中解锁GIL

    • 根据全球解释器锁(GIL) - 其他 - 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活动进行任何编程,以执行任何操作