在Python中运行C++代码并进行交互
我现在的项目主要是用Python写的,但我想把一些计算量大的部分用C++重写,以提高性能。大部分情况下,我可以通过从DLL文件加载简单的函数来实现,但并不是所有的情况都能这样做。我在Python中有一个多维数组,想在C++中对它进行操作(特别是A*寻路算法),但我不太确定怎么把这些操作转到C++上。而且,一次只把数据的一小部分发送到加载的函数里,感觉效率很低(这个数组的前两个维度有几百个元素,函数需要同时处理数十甚至上百个元素)。
我的想法是,在C++中创建一个类,在设置时创建这个数组的副本(这个时候性能不是问题),然后在这个类里写一些方法来对数组进行操作,并把结果返回给主Python程序。不过,我不太确定这样做是否可行,甚至是否是正确的方法;这似乎意味着C++代码要和主Python程序并行运行,而直觉告诉我这样不好。
我对如何将C++和Python结合得不多,除了知道如何通过cTypes在Python中加载简单的函数,所以我非常希望能得到一些建议。请记住,我对C++还比较陌生;我大部分的编程经验都是在Python上。那在这种情况下,最好的方法是什么呢?
2 个回答
你可以看看 Cython。
首先,当你在Python中处理多维数组时,最好使用NumPy这个库。这样做的好处是,NumPy可以帮你快速处理数据,通常你的程序在使用NumPy进行计算时会更快,而不是用Python的for
循环来计算。
如果你觉得这样还不够快,可以考虑用Cython来写程序的某些部分。Cython支持NumPy数组,并且让你可以用类似Python的语法来写C语言代码,简单又方便。
如果你真的需要用C++,我强烈推荐使用Boost.Python。用Boost.Python可以轻松地把Python和C++连接起来。而且,Boost.Python也支持NumPy(boost::numeric::array
)。