小编gui*_*nny的帖子

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
查看次数

ZipExtFile到Django文件

我想知道是否有办法将zip文件上传到django web服务器并将zip文件放入django数据库而不访问过程中的实际文件系统(例如将zip文件解压缩到tmp目录然后加载它们)

Django提供了一个将python文件转换为Django文件的函数,所以如果有一种方法将ZipExtFile转换为python文件,它应该没问题.

感谢帮助!

Django模型:

from django.db import models

class Foo:
    file = models.FileField(upload_to='somewhere')
Run Code Online (Sandbox Code Playgroud)

用法:

from zipfile import ZipFile 
from django.core.exceptions import ValidationError  
from django.core.files import File  
from io import BytesIO  

z = ZipFile('zipFile')
istream = z.open('subfile')
ostream = BytesIO(istream.read())
tmp = Foo(file=File(ostream))
try:
    tmp.full_clean()
except Validation, e:
    print e
Run Code Online (Sandbox Code Playgroud)

输出:

{'file': [u'This field cannot be blank.']}
Run Code Online (Sandbox Code Playgroud)

[解决方案]解决方案使用丑陋的黑客:

正如Don Quest正确指出的那样,类似文件的类(如StringIO或BytesIO)应将数据表示为虚拟文件.但是,Django File的构造函数只接受内置文件类型而不接受任何其他内容,尽管类文件类也可以完成这项工作.黑客是手动设置Django :: File中的变量:

buf = bytesarray(OPENED_ZIP_OBJECT.read(FILE_NAME))
tmp_file = BytesIO(buf)
dummy_file = File(tmp_file)   # this line actually fails
dummy_file.name = SOME_RANDOM_NAME …
Run Code Online (Sandbox Code Playgroud)

python django file

8
推荐指数
2
解决办法
2271
查看次数

cmake:分层项目设置

我有一个具有以下结构的项目:

proj:
-CMakeLists.txt    
-subdir0   
  -CMakeLists.txt    
  -app0.cpp
  -app1.cpp
-subdir1
  -CMakeLists.txt    
  -app2.cpp
Run Code Online (Sandbox Code Playgroud)

在构建之后,我喜欢:

proj:    
-CMakeLists.txt    
-subdir0   
  -CMakeLists.txt    
  -app0.cpp
  -app1.cpp
-subdir1
  -CMakeLists.txt    
  -app2.cpp
-build
  -subdir0   
    -app0.exec
    -app1.exec
  -subdir1
    -app2.exec
Run Code Online (Sandbox Code Playgroud)

CMake文档很难阅读,我在这里需要的只是一个例子(例如现有项目)如何设置它...

非常感谢!

cmake

8
推荐指数
1
解决办法
3446
查看次数

为什么它需要它!= obj.end()虽然每个迭代器应该知道自己何时终止?

以下问题刚刚从头脑中射出.对于c ++ stl迭代器,通常的做法是使用类似的东西:

for (iterator it=obj.begin(); it!=obj.end(); it++)
Run Code Online (Sandbox Code Playgroud)

我想知道的是,实际上obj.begin()可以告诉"它"何时停止哪个会使for循环看起来像:

for (iterator it=obj.begin(); !it.end(); it++)
Run Code Online (Sandbox Code Playgroud)

好处是使迭代器更加自包含,并且可以在容器类中保存(迭代器end()).

c++ containers iterator

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

返回向量的奇怪行为

我有以下问题:

#include <vector>
#include <iostream>
using namespace std;


class Mat {
public:

        typedef vector<float>::size_type size_type;

        Mat (size_type k, size_type m)
        :data_(k*m){}

        inline vector<float> data() const {return data_;}

        vector<float> data_;
};

int main(){

    Mat f (6, 10);

    cout << f.data().size() << " " << f.data().end() - f.data().begin();

}
Run Code Online (Sandbox Code Playgroud)

输出为60 122.

我以为整个矢量data_一遍又一遍地移动,但是为什么在这个操作之后begin()end()无效?

c++ return vector

2
推荐指数
1
解决办法
114
查看次数

索引的排序向量

我有一个非常简单的问题,我认为我只是在做一些愚蠢的事情,但几个小时都找不到这个bug.

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

typedef unsigned int uint;

enum {ASCEND, DESCEND};

template<typename T>
bool ascend_sort(pair<uint, T> i, pair<uint, T> j){return j.second>i.second;}

template<typename T>
bool descend_sort(pair<uint, T> i, pair<uint, T> j){return i.second>j.second;}

template<typename T>
void sortIdx(vector<uint>& idx, const vector<T>& src, int dir=ASCEND){
    vector< pair<uint, T>  > tmp (src.size());
    for (uint i=0; i<src.size(); i++){
        tmp.push_back(pair<uint, T>(i, src[i]));
        cout << i << " " << src[i] << " \n";
    }

    if (dir==ASCEND){
        sort(tmp.begin(), tmp.end(), ascend_sort<T>);
    }else{
        sort(tmp.begin(), …
Run Code Online (Sandbox Code Playgroud)

c++ sorting vector

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

发布版本会导致简单的protobuf代码失败

我有以下单元测试代码,它基本上通过序列化和反序列化来复制对象:

FloatMat mat2;                                  
assert(mat2.ParseFromString(mat.SerializeAsString()));      

cout << mat.vec_size() << "\n";                             
cout << mat2.vec_size() << "\n";                            
Run Code Online (Sandbox Code Playgroud)

使用cmake调试模式构建时,它会按预期方式给出:

2
2
Run Code Online (Sandbox Code Playgroud)

但是当使用cmake release模式构建时,它会给出:

2
0
Run Code Online (Sandbox Code Playgroud)

我对发布模式的构建不太熟悉,请帮忙!谢谢!

c++ release protocol-buffers

0
推荐指数
1
解决办法
111
查看次数