小编Rip*_*lka的帖子

Boost.Python:Wrap函数释放GIL

我目前正在使用Boost.Python,并希望得到一些帮助来解决一个棘手的问题.

上下文

当C++方法/函数暴露给Python时,它需要释放GIL(全局解释器锁)以让其他线程使用解释器.这样,当python代码调用C++函数时,解释器可以被其他线程使用.现在,每个C++函数看起来像这样:

// module.cpp
int myfunction(std::string question)
{
    ReleaseGIL unlockGIL;
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

为了传递它来提升python,我做:

// python_exposure.cpp
BOOST_PYTHON_MODULE(PythonModule)
{
    def("myfunction", &myfunction);
}
Run Code Online (Sandbox Code Playgroud)

问题

这个方案工作正常,但它暗示这module.cpp取决于Boost.Python没有充分理由.理想情况下,只python_exposure.cpp应该依赖Boost.Python.

解?

我的想法是用Boost.Function这样包装函数调用:

// python_exposure.cpp
BOOST_PYTHON_MODULE(PythonModule)
{
    def("myfunction", wrap(&myfunction));
}
Run Code Online (Sandbox Code Playgroud)

这里wrap将负责在通话期间解锁GIL myfunction.这种方法的问题是wrap需要具有相同的签名,myfunction这几乎意味着重新实现Boost.Function...

如果有人对此问题有任何建议,我将非常感激.

c++ python boost function boost-python

9
推荐指数
1
解决办法
3114
查看次数

concurrentdvector用于2d数组

我目前正在尝试使用表示2D数组tbb::concurrent_vector<T>.这个2d数组将被许多不同的线程访问,这就是为什么我希望它能够最有效地处理并行访问.

我想出了两个解决方案:

  • 用a tbb::concurrent_vector<tbb::concurrent_vector<T> >来存储它.

  • 将所有内容存储在一个tbb::concurrent_vector<T>和访问元素中x * width + y

我偏爱第二个,因为我不想锁定整行来访问一个元素(因为我假设要访问该元素array[x][y],tbb实现将锁定第xth行然后锁定第th y个元素).

我想知道哪种解决方案对你来说更好.

c++ parallel-processing multithreading tbb concurrent-vector

6
推荐指数
1
解决办法
1928
查看次数

用于C++程序的Web界面

我正在为我的学习结束开发一个项目.该项目基本上充当服务器,是跨平台的,用C++开发.

我想知道是否有可能创建一个可以用作例如listener设计模式的Web界面来记录程序的功能.这将是跨平台的,并且是理想的,因为该程序应该在远程服务器上运行.

我的问题是:是否有任何网络技术可以让我在程序记录时更新我的​​网页.我知道这是不寻常的,我不是网络技术专家,这就是我要问的原因.

Erlang会这样做吗?

谢谢你的帮助

编辑:为了给出一个更具体的例子,我希望能够实时关注我的程序执行,并看到我的程序的日志出现在页面上.我的想法是使用一个网页,就像我在Windows上使用WPF或在Linux上使用GTK一样.就像有人说的那样,在我的应用程序监视器上会有某种形式.

c++

4
推荐指数
1
解决办法
3874
查看次数