从C扩展调用Python函数的速度开销

2024-05-06 00:13:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,其中包括模拟几个不同变量的进化路径。程序的大部分是用Python编写的,但是我正在编写模拟循环的代码(~15k)作为C扩展来提高速度。不过,我还是想利用Numpy的随机数生成器(here)。我知道我可以从我的扩展中调用Python函数,但是这会减慢C循环的速度,从而否定编写扩展的初衷吗?在


Tags: 函数代码路径程序numpy利用here速度
1条回答
网友
1楼 · 发布于 2024-05-06 00:13:39

从C扩展调用Python函数时,会有几个开销:

  1. 要传递给python函数的C变量需要包装在python对象中。这与直接在Python中创建对象的成本一样高。在
  2. 需要调用Python函数。这将花费与普通Python函数调用相同的代价。在
  3. 返回值需要为C解包,它的python值将被垃圾回收。这也与超出范围的普通Python返回值的成本一样高。在

判断它是否值得,实际上取决于用C语言完成的代码量以及在那里可以避免多少python对象操作。如果在C语言中只有一个调用python函数的for循环,这可能是不值得的。如果您做了很多可以用C语言完成的数据操作,那么即使您在某处调用Python函数,也可以保存所有这些操作。在

但是最快的方法可能是使用numpy C API并直接从C调用numpy函数。这将使您不必将所有参数打包到Python对象中,而仍然使用numpy的功能,从而避免了大部分开销。在

相关问题 更多 >