【问题标题】:Problems regarding Boost::Python and Boost::Threads关于 Boost::Python 和 Boost::Threads 的问题
【发布时间】:2011-03-12 22:51:51
【问题描述】:

我和一个朋友正在开发一个使用 Boost::Python 的应用程序。我在 C++ 中定义了一个接口(也是一个纯虚拟类),通过 Boost::Python 向用户公开,用户必须从它继承并创建一个类,应用程序采用该类并将其用于某些回调机制。

到目前为止,一切都很顺利。现在,函数回调可能需要一些时间(用户可能编写了一些繁重的东西)......但是我们需要重新绘制窗口,所以它看起来不会“卡住”。我们想为此使用 Boost::Thread .一次只会运行一个回调(没有其他线程会同时调用 python),所以我们认为这不会是一个很大的问题......因为我们不使用 python 内部的线程,也没有在为 python 包装的 C++ 代码。

我们所做的是在 Py_Initialize() 之后调用 PyEval_InitThreads(),然后,在它自己的 boost 线程中调用函数回调之前,我们使用宏 PY_BEGIN_ALLOW_THREADS 和,以及当线程结束时使用宏 PY_END_ALLOW_THREADS。

我想我不需要说执行永远不会到达第二个宏。它每次运行时都会显示几个错误......但总是在调用实际回调时出现。我用谷歌搜索了很多,甚至阅读了一些关于线程的 PEP 文档,但他们都在谈论 python 模块中的线程(我不认为它只是一个暴露的纯虚拟类)或 python 中的线程,而不是关于主应用程序从多个线程调用 Python。

请帮忙,这让我沮丧了好几个小时。

附言。帮忙!

【问题讨论】:

    标签: c++ python boost-thread boost-python


    【解决方案1】:

    可以从多个线程串行调用 Python,我认为这不是问题。在我看来,您的错误只是来自糟糕的 C++ 代码,正如您所说的错误发生在 PY_BEGIN_ALLOW_THREADS 之后和 PY_END_ALLOW_THREADS 之前。

    如果您知道这不是真的,您能否发布更多您的实际代码,并准确显示它的错误位置以及它给出的错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多