首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C扩展调用Python函数的速度开销

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

Stack Overflow用户
提问于 2014-06-11 21:39:05
回答 1查看 1.1K关注 0票数 3

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-11 23:40:08

当您从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的功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24173025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档