我正在尝试使用 Cython 来编写我的项目。
我的计划是用 C++ 编写 .dll,然后通过 Cython 从 Python 调用它们。这样我就可以拥有C++的高计算性能,同时保持Python开发的简单性。
随着我的深入,我有点困惑。据我了解,Cython将python代码包装到C中。由于C具有更好的计算性能,因此性能得到了提高。我对此是否正确?
如果我在上面,那么是否有必要用 C++ 编写 .dll 并从 Python 调用它以提高性能?
如果我编写 python 代码并将其包装到 C 中,然后从 Python 调用它,它是否比调用用 C++ 编写的 .dll 性能更好?
首先,让我来破除你似乎有的几个误解。
不,不,不,不,不。这就像说“以设定速度驾驶汽车比让 F1 赛车手以相同速度驾驶汽车慢”一样有意义。它只是没有意义。当 Python 加载您的库时,它加载和处理它的方式与内核加载和处理它的方式相似(事实上,在 Python 的情况下,内核也是这样做的)。事实上,这种“双重加载”(这不是动态库的原始设计)可以减慢您的库。我要强调的是,这是一个微小的差异,普通程序员不必担心。
- Cython 将 Python 代码“包装”成 C
事实并非如此。它将 python 代码编译成 C,然后编译成动态库供 Python 稍后加载。这可能会在某种程度上优化您的 Python 代码,并使您能够与原子 C 数据类型进行交互,并在上面加上 Python 的魔法酱汁。虽然这很酷,但它不会为您的代码提供任何“神奇”的能力。
我还想补充一点,一些测试已经证明 Java 实际上比 C、C++、Python 和其他语言更快(鼓声),因为 JVM 非常优化。这并不意味着您应该使用 Java(因为它还有其他问题),但它应该提供视角。