使用 boost::python 从 C++ 函数进行大 table 访问
Large table access from c++ functions with boost::python
我正在用 C++ 生成一个非常大的查找 table 并从各种 C++ 函数中使用它。这些函数使用 boost::python 暴露给 python。
当不用作 class 的一部分时,可以实现所需的行为。当我尝试使用这些函数作为 python 中编写的 class 的一部分时,我 运行 遇到了访问查找 table.
的问题
------------------------------------
C++ for some numerical heavy lifting
------------------------------------
include <boost/python>
short really_big_array[133784630]
void fill_the_array(){
//Do some things which populate the array
}
int use_the_array(std::string thing){
//Lookup a few million things in the array depending on thing
//Return some int dependent on the values found
}
BOOST_PYTHON_MODULE(bigarray){
def("use_the_array", use_the_array)
def("fill_the_array", fill_the_array)
}
---------
PYTHON Working as desired
---------
import bigarray
if __name__ == "__main__"
bigarray.fill_the_array()
bigarray.use_the_array("Some Way")
bigarray.use_the_array("Some Other way")
#All works fine
---------
PYTHON Not working as desired
---------
import bigarray
class BigArrayThingDoer():
"""Class to do stuff which uses the big array,
use_the_array() in a few different ways
"""
def __init__(self,other_stuff):
bigarray.fill_the_array()
self.other_stuff = other_stuff
def use_one_way(thing):
return bigarray.use_the_array(thing)
if __name__ == "__main__"
big_array_thing_doer = BigArrayThingDoer()
big_array_thing_doer.use_one_way(thing)
#Segfaults or random data
我想我可能没有向 python 公开足够的信息来确保数组在正确的时间可以访问,但我不太确定我应该公开什么。同样可能存在涉及查找所有权的某种问题 table.
除了通过其他 C++ 函数,我不需要操作查找 table。
定义中缺少自我。在我应该只使用关键字参数的地方使用关键字参数,所以在 运行.
时没有错误
我正在用 C++ 生成一个非常大的查找 table 并从各种 C++ 函数中使用它。这些函数使用 boost::python 暴露给 python。
当不用作 class 的一部分时,可以实现所需的行为。当我尝试使用这些函数作为 python 中编写的 class 的一部分时,我 运行 遇到了访问查找 table.
的问题 ------------------------------------
C++ for some numerical heavy lifting
------------------------------------
include <boost/python>
short really_big_array[133784630]
void fill_the_array(){
//Do some things which populate the array
}
int use_the_array(std::string thing){
//Lookup a few million things in the array depending on thing
//Return some int dependent on the values found
}
BOOST_PYTHON_MODULE(bigarray){
def("use_the_array", use_the_array)
def("fill_the_array", fill_the_array)
}
---------
PYTHON Working as desired
---------
import bigarray
if __name__ == "__main__"
bigarray.fill_the_array()
bigarray.use_the_array("Some Way")
bigarray.use_the_array("Some Other way")
#All works fine
---------
PYTHON Not working as desired
---------
import bigarray
class BigArrayThingDoer():
"""Class to do stuff which uses the big array,
use_the_array() in a few different ways
"""
def __init__(self,other_stuff):
bigarray.fill_the_array()
self.other_stuff = other_stuff
def use_one_way(thing):
return bigarray.use_the_array(thing)
if __name__ == "__main__"
big_array_thing_doer = BigArrayThingDoer()
big_array_thing_doer.use_one_way(thing)
#Segfaults or random data
我想我可能没有向 python 公开足够的信息来确保数组在正确的时间可以访问,但我不太确定我应该公开什么。同样可能存在涉及查找所有权的某种问题 table.
除了通过其他 C++ 函数,我不需要操作查找 table。
定义中缺少自我。在我应该只使用关键字参数的地方使用关键字参数,所以在 运行.
时没有错误