Fab*_*ter 7 c++ python boost-thread boost-python
我和一个朋友正在开发一个使用Boost :: Python的应用程序.我已经在C++中定义了一个接口(很好是一个纯虚拟类),通过Boost :: Python公开给用户,他们必须从中继承并创建一个类,应用程序将其用于某些回调机制.
一切都很顺利.现在,函数回调可能需要一些时间(用户可能已编写了一些重要的东西)...但我们需要重新绘制窗口,因此它看起来并不"卡住".我们想使用Boost :: Thread来实现这一点.一次只能运行一个回调(没有其他线程会同时调用python),所以我们认为它不会那么大......因为我们不在python中使用线程,也不在包装为python的C++代码.
我们所做的是在Py_Initialize()之后调用PyEval_InitThreads(),然后,在调用它自己的boost线程中的函数回调之前,我们使用宏PY_BEGIN_ALLOW_THREADS,并在线程结束时使用宏PY_END_ALLOW_THREADS.
我想我不需要说执行永远不会到达第二个宏.它每次运行时都会显示几个错误...但是在调用实际回调时总是这样.我已经google了很多,甚至阅读了一些关于线程的PEP文档,但是他们都讨论了python模块中的线程(我不认为它只是一个纯粹的虚拟类暴露)或者在python中进行线程化,而不是主要的应用程序从多个线程调用Python.
请帮忙,这让我感到沮丧几个小时.
PS.救命!
Python 可以从多个线程串行调用,我不认为这是一个问题。在我看来,您的错误只是来自错误的 C++ 代码,正如您所说,错误发生在 PY_BEGIN_ALLOW_THREADS 之后和 PY_END_ALLOW_THREADS 之前。
如果您知道这不是真的,您能否发布更多的实际代码并准确显示其错误位置以及其给出的错误?