我試圖一塊C++代碼包裝成蟒LIB使用Boost.Python的,但是,我發現了多個實例不能在同一時間運行:boost.python不支持並行性?
代碼(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)
;
}
這是編譯使用CMake的(CMake的):
add_library(run_test SHARED run_test.cpp)
target_link_libraries(run_test boost_python python2.7)
並用下面的代碼(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()
輸出表明代碼以非常奇怪的方式並行化。每個線程應該只需要2秒鐘,4個線程應我的四核機器上同時運行:
[2011-11-04 13:57:01] performing DoS attack
[2011-11-04 13:57:01] performing DoS attack
[2011-11-04 13:57:05] performing DoS attack
[2011-11-04 13:57:05] performing DoS attack
[2011-11-04 13:57:09] performing DoS attack
感謝您的幫助!
好,這當然看起來像一個合法的應用程序...;) – larsmoa
如果您指出哪些代碼是python,哪些是C++,這將更容易閱讀。我知道了,但是我花了一點時間。 –