Python面试:使用Cython提升代码运行速度

1. 首先建立一个pyx文档。

main.pyx

python 复制代码
# 以下函数用于找出所有小于amount的质数
# python版本
def prime_finder_python(amount):
    primes = []

    found = 0
    number = 2
    while found < amount:
        for x in primes:
            if number % x == 0:
                break
        else:
            primes.append(number)
            found += 1
        number += 1
    return primes

# c版本
def prime_finder_optimized(int amount):
    cdef int number, x, found 
    cdef int primes[100000]

    amount = min(amount, 100000)

    found = 0
    number = 2
    while found < amount:
        for x in primes[:found]:
            if number % x == 0:
                break
        else:
            primes[found] = number
            found += 1

        number += 1

    return_list = [p for p in primes[:found]]
    return return_list

2. 接着建立一个setup

setup.py

python 复制代码
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize('main.pyx')
)

3. 在CMD中执行指令"python setup.py build_ext --inplace"

建立相应的c文档

成功后会生成两个文档"main.cp310-win_amd64.pyd"和"main.c"

4. 建立一个执行文档

test.py

python 复制代码
import main
import time

print(main.prime_finder_python(40))

5. 测试时间

python 复制代码
import main
import time

start_python = time.time()
main.prime_finder_python(20000)
end_python = time.time()

print(end_python - start_python)

start_c = time.time()
main.prime_finder_optimized(20000)
end_c = time.time()

print(end_c - start_c)

输出为:

3.2258031368255615

0.40691256523132324

我们可以看到,对于同一个函数,C版本的执行时间为Python版本的1/8,大大提升了代码运行速度。

相关推荐
小肝一下1 小时前
3.基础语法(3)
python
深蓝AI2 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python
心祭丫丫2 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了2 小时前
Skill 索引瘦身与渐进加载
python
贾公子2 小时前
检测链路的容量规划——用 Little's Law 算清 QPS、并发与积压
后端·python
露天赏雪3 小时前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
天天被压力3 小时前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
天天被压力3 小时前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python
ATMQuant3 小时前
量化策略开发08:Lasso因子选择 - 因子动物园的断舍离
python·量化交易·lasso·vnpy·多因子选股
yeccheng5 小时前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试