gpt4 book ai didi

python - 从 C 扩展调用 Python 函数的速度成本

转载 作者:行者123 更新时间:2023-11-28 17:41:05 25 4
gpt4 key购买 nike

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

最佳答案

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

关于python - 从 C 扩展调用 Python 函数的速度成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com