Python 和 Cython 性能比较

360影视 2025-01-06 09:29 3

摘要:在优化 Python 代码时,性能关键部分可以从 Cython 等工具中受益匪浅。在本文中,我们将演练将 Python 实现的性能与 Cython 实现的性能进行比较的过程。最后,您将了解 Cython 如何加速计算以及如何精确测量执行时间。

在优化 Python 代码时,性能关键部分可以从 Cython 等工具中受益匪浅。在本文中,我们将演练将 Python 实现的性能与 Cython 实现的性能进行比较的过程。最后,您将了解 Cython 如何加速计算以及如何精确测量执行时间。

我们从一个简单的 Python 函数开始,该函数计算范围内数字的平方和:

import timedef python_function: result = 0 for i in range(1, 10**6): result += i**2 return resultif __name__ == "__main__": start_time = time.perf_counter python_result = python_function end_time = time.perf_counter print(f"Python Result: {python_result}") print(f"Python Execution Time: {end_time - start_time:.10f} seconds")

Python 实现功能正常,但相对较慢,在此范围内执行大约需要 0.0987 秒。

Cython 允许将类似 Python 的语法编译成 C 语言,从而大大提高性能。我们创建了以下 Cython 实现并将其保存在名为 cython_function.pyx 的文件中:

def cython_function: cdef unsigned long long result = 0 # Use unsigned long long for larger values cdef unsigned long long i # Use unsigned long long for the loop variable for i in range(1, 10**6): # Ensure the loop runs correctly result += i * i # Avoid Python's ** operator; use * for better performance and accuracy return result

此实现使用 cdef 将变量声明为 unsigned long long,从而防止整数溢出并确保计算保持高效。

为了编译 Cython 文件,我们使用了以下 setup.py 脚本:

from setuptools import setup, Extensionfrom Cython.Build import cythonizeextensions = [ Extension("cython_function", ["cython_function.pyx"]),]setup( ext_modules=cythonize(extensions),)

我们运行了编译命令:

python setup.py build_ext --inplace

这会在工作目录中生成一个 .pyd 文件 ( cython_function.cp312-win_amd64.pyd )。

我们更新了 Python 脚本以测试这两种实现,并使用 time.perf_counter 精确测量执行时间:

from cython_function import cython_functionfrom Python_Implementation import python_functionimport time# Measure Python execution timestart_time = time.perf_counterpython_result = python_functionend_time = time.perf_counterprint(f"Python Result: {python_result}")print(f"Python Execution Time: {end_time - start_time:.10f} seconds")# Measure Cython execution timestart_time = time.perf_countercython_result = cython_functionend_time = time.perf_counterprint(f"Cython Result: {cython_result}")print(f"Cython Execution Time: {end_time - start_time:.10f} seconds")

结果表明,Cython 的性能得到了显著提高:

Cython 优化

声明变量类型 (cdef) 和使用高效运算(例如,* 而不是 **)对于性能至关重要。

精确计时

time.perf_counter 提供更高的分辨率,非常适合测量小执行时间。

设置挑战

编译 Cython 需要 C 编译器。对于 Windows,安装 Microsoft C++ Build Tools 是必不可少的。

通过使用 Cython 将类似 Python 的代码编译成 C 语言,我们实现了性能的显著提升。这证明了 Cython 在 Python 中优化计算密集型任务的潜力。Cython 密切关注变量类型和编译步骤,对于希望将 Python 的简单性与 C 语言的速度相融合的开发人员来说,它是一个强大的工具。

来源:自由坦荡的湖泊AI一点号

相关推荐