使用 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。

定义中缺少自我。在我应该只使用关键字参数的地方使用关键字参数,所以在 运行.

时没有错误