相关疑难解决方法(0)

boost.python不支持并行性?

我试图使用boost.python将一段C++代码包装到python lib中,但是,我发现多个实例不能同时运行:

代码(C++):

class Foo{
public:
    Foo(){}
    void run(){
        int seconds = 2;
        clock_t endwait;
        endwait = clock () + seconds * CLOCKS_PER_SEC ;
        while (clock() < endwait) {}
    }   

};

BOOST_PYTHON_MODULE(run_test)
{
   using namespace boost::python;

   class_<Foo>("test", init<>())
      .def("run", &Foo::run)
      ;   

}
Run Code Online (Sandbox Code Playgroud)

这是使用CMake(CMake)编译的:

add_library(run_test SHARED run_test.cpp)
target_link_libraries(run_test boost_python python2.7)
Run Code Online (Sandbox Code Playgroud)

并使用以下代码(Python)进行测试:

class Dos(threading.Thread):
    def run(self):
        printl('performing DoS attack')

        proc = test()
        proc.run()

for i in range(5):
    t = Dos()
    t.start()
Run Code Online (Sandbox Code Playgroud)

输出表明代码以非常奇怪的方式并行化.每个线程应该只需要2秒钟,并且我的四核机器上应该同时运行4个线程:

[2011-11-04 13:57:01] performing DoS attack
 [2011-11-04 13:57:01] performing DoS attack …
Run Code Online (Sandbox Code Playgroud)

c++ parallel-processing boost boost-python

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

在C++代码中释放Python GIL

我有一个用C++编写的库,我使用SWIG包装并在python中使用.通常有一个类只有很少的方法.问题是调用这些方法可能很耗时 - 它们可能会挂起我的应用程序(调用这些方法时不会释放GIL).所以我的问题是:

为这些方法调用释放GIL的最简单方法是什么?

(据我所知,如果我使用了一个C库,我可以使用一些额外的C代码来包装它,但在这里我使用C++和类)

c++ python swig gil

7
推荐指数
3
解决办法
2870
查看次数

标签 统计

c++ ×2

boost ×1

boost-python ×1

gil ×1

parallel-processing ×1

python ×1

swig ×1