我想知道是否有一个从C++源代码pyd模块中编译两次的解决方案。那么,在C中定义两个不同变量值的模块的两个单独的实例呢?这是一个例子。我有一个简单的cpp模块:
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
int n;
void set(int i)
{
n = i;
}
int get()
{
return n;
}
BOOST_PYTHON_MODULE(test_ext)
{
using namespace boost::python;
def("set", set);
def("get", get);
}现在我试着两次导入:
In [1]: import sys
In [2]: import test_ext as t1
In [3]: del sys.modules['test_ext']
In [4]: import test_ext as t2
In [5]: t1.set(1)
In [6]: t2.set(2)
In [7]: t1.x=1
In [8]: t2.x=2
In [9]: t1.x
Out[9]: 1
In [10]: t2.x
Out[10]: 2
In [11]: t1.get()
Out[11]: 2
In [12]: t2.get()
Out[12]: 2如您所见,这两个模块指向相同的变量。如果我把它设置在一个模块中,它就会在另一个模块中改变。
实际上,我有一个由Matlab生成的代码,其中有很多全局变量。我想找到一种在模块的几个实例中独立运行这段代码的方法。顺便说一下,我使用python 2.7
提前感谢!
发布于 2014-04-11 08:51:16
这方面的一个问题是Python的C扩展正在转义Python沙箱(甚至在Python文档中也注意到了这种行为)。
实际上,您不能期望在一个地址空间(例如,一个进程)中在C中有多个全局变量实例。这是不可能的,甚至连与Python都没有任何联系。
顺便说一句:实际上,您甚至可以用这种方式“互连”两个Python。
那么如何解决这个问题:
https://stackoverflow.com/questions/22919998
复制相似问题