Python C API 性能提升?

标签 python c python-c-api

是否有任何数据可以直观地显示当直接用 C 编写函数用作 python 模块时,使用 Python C API 可以获得多少性能?

除了“C 更快”这一显而易见的事实之外;有没有比较Python C API 和C 的数据?

最佳答案

我不确定是否有任何简单的方法来获取此类“数据”。这实际上取决于你在做什么,并且你必须考虑到,与直接在 Python 中执行操作相比,将数据从 Python 端传输到 C 端并再次返回会给系统带来额外的负载。

如果您正在进行大量计算,并且这些计算很复杂但无法在现有库(例如“numpy”)中完成,那么它可能值得做。当然,计算不一定是“数学”,它可以是在一个大数组中打乱数据,或者进行 if (x > y) z++; 类型的操作。但是,在将数据从“python”类型数据转换为“C”类型数据并再转换回来之前,您确实需要做大量的事情。

这有点像问“这辆运动型汽车比那辆不那么运动型的汽车快多少”,如果您在拥堵严重的大城市开车,差别可能根本就没有 - 但如果你把它们带到赛道上,让跑车适本地拉伸(stretch)它的腿,胜利者就很明显了。

在“汽车”主题中,“拥塞”是对 C 中一个非常小的函数的大量调用,该函数没有做太多工作 - “从 Python 转换为 C 并返回 Python 数据”将是拥堵/红绿灯。如果你有大量数据,那么你会得到更多的“赛道”效果。

关于Python C API 性能提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18949298/

相关文章:

python - C++-Python 互操作 : Marshalling data faster

python - 算法 - 如何快速确保每个组中的元素都是唯一的

c - 在两个头文件中使用特殊类型时出现问题。 (C代码)

c - 如何让 scanf 循环在到达文件末尾时终止?

python - 在 Python C API 中,如果未设置第二个参数,如何默认为第一个参数的值?

python - 如何获取 PyObject 的引用计数?

python - Dask 分布式客户端 - 错误 - 10 秒后无法重新连接到调度程序,正在关闭客户端

python - 功能等同于 Python 语句逻辑

python - 如何在 Python 中查找特定函数定义的所有引用

c - 为什么 fetestexcept() 在乘以 float 时有时会报错?