螺纹a c++;python程序 我在Kivy编写了一个Python应用程序,它使用C++程序进行高速计算,然后返回一个值,而我的Python应用程序使用了.< C++程序包在pybd11中,导入到应用程序中,然后从Python调用。 我的问题是,当C++程序被执行时,我的程序会停止一段时间,我仍然希望在后台进行的事情。 我天真地以为这可以通过线程C++来解决,但在第二个想法上,我认为问题在于吉尔。我必须解锁吉尔,我如何才能实现这个? < p>不看到任何代码,我只能推断你的Python代码在等待其他代码之前完成C++代码的完成。这可能意味着以下任一项或两项: >您不在C++代码< /p>中

螺纹a c++;python程序 我在Kivy编写了一个Python应用程序,它使用C++程序进行高速计算,然后返回一个值,而我的Python应用程序使用了.< C++程序包在pybd11中,导入到应用程序中,然后从Python调用。 我的问题是,当C++程序被执行时,我的程序会停止一段时间,我仍然希望在后台进行的事情。 我天真地以为这可以通过线程C++来解决,但在第二个想法上,我认为问题在于吉尔。我必须解锁吉尔,我如何才能实现这个? < p>不看到任何代码,我只能推断你的Python代码在等待其他代码之前完成C++代码的完成。这可能意味着以下任一项或两项: >您不在C++代码< /p>中,python,c++,multithreading,gil,Python,C++,Multithreading,Gil,根据,使用pybind,应该这样做: py::gil\u范围的发布; 长时间运行的方法(); py::gil_范围的获取; 注意,您需要GIL来访问任何Python机器(包括返回结果)。因此,在发布之前,请确保将所有需要的数据从Python类型转换为C++类型。 >p>你没有任何其他的活动Python线程,所以在C++调用正在进行中时,没有其他程序被用来做任何事情。 如果你有一个多线程应用程序,那么如果你的C++代码没有解锁GILO,那么你就不能从多线程中获得很多的速度。请添加一个显示C+

根据,使用
pybind
,应该这样做:

py::gil\u范围的发布;
长时间运行的方法();
py::gil_范围的获取;
注意,您需要GIL来访问任何Python机器(包括返回结果)。因此,在发布之前,请确保将所有需要的数据从Python类型转换为C++类型。 >p>你没有任何其他的活动Python线程,所以在C++调用正在进行中时,没有其他程序被用来做任何事情。
如果你有一个多线程应用程序,那么如果你的C++代码没有解锁GILO,那么你就不能从多线程中获得很多的速度。请添加一个显示C++和Python代码交互的方法以及线程如何操作。否则,我们在这里进行的讨论毫无意义,因为在不知道的情况下,我们不能说任何具体的事情。令人惊讶的是,两个答案都是正确的!!我已经实现了第一个答案,我正在决定在计算过程中要进行的活动。非常感谢您的回复,我很想投票,但我还没有达到要求的声誉…:/@你可以用它来代替。