我有一个 C++ 程序,使用 C api 调用我的 Python 库。同时,Python库和C++代码都是多线程的。
特别地,C++程序的一个线程实例化了一个继承自 `threading.Thread` 的 Python 对象。我需要所有的 C++ 线程都能够调用该对象的方法。
从我的第一次尝试开始(我天真地只是在主线程中实例化对象,然后等待一段时间,再调用方法),我发现与创建的对象相关联的 Python 线程的执行在回到 C++ 程序时会停止。
如果执行保持在 Python 中(例如,如果我调用 `PyRun_SimpleString("time.sleep(5)");`),则 Python 线程的执行将在后台继续进行,直到等待结束并且执行返回到 C++ 为止,一切都正常。
显然我做错了什么。为了使我的 C++ 和 Python 都是多线程的,并能够很好地互相工作,我应该怎么做?由于我没有任何经验,请不要做任何假定!
特别地,C++程序的一个线程实例化了一个继承自 `threading.Thread` 的 Python 对象。我需要所有的 C++ 线程都能够调用该对象的方法。
从我的第一次尝试开始(我天真地只是在主线程中实例化对象,然后等待一段时间,再调用方法),我发现与创建的对象相关联的 Python 线程的执行在回到 C++ 程序时会停止。
如果执行保持在 Python 中(例如,如果我调用 `PyRun_SimpleString("time.sleep(5)");`),则 Python 线程的执行将在后台继续进行,直到等待结束并且执行返回到 C++ 为止,一切都正常。
显然我做错了什么。为了使我的 C++ 和 Python 都是多线程的,并能够很好地互相工作,我应该怎么做?由于我没有任何经验,请不要做任何假定!
PyGILState_STATE gstate; gstate = PyGILState_Ensure();
2)创建继承自threading.Thread
的 Python 对象3)PyGILState_Release(gstate);
4)睡眠几秒钟(在 C++ 中)在运行函数中,该对象应该每隔一段时间打印出一些东西,但显然只有前几毫秒才这样做。我做错了什么..? - Matteo Monti