cython加速python_安装与简单使用

1.写一个test.pyx(一般是py,但为了用cython编译,我们需要把后缀改成.pyx )

import time
def run_time(func):
    def run(*args):
        t1 = time.time()
        func(*args)
        t2 = time.time()
        print('run time:{}'.format(t2 - t1))

    return run  # 这里返回需要函数名即可,会自动调用

def is_prime(num):
    if num < 2:
        return False
    elif num == 2:
        return True
    else:
        for i in range(2, num):
            if num % i == 0:
                return False
        else:
            return True
@run_time
def prime_num(max_num):
    for i in range(2, max_num):
        if is_prime(i):
            print(i)
if __name__=='__main__':
    prime_num(100000)


'''run time:22.816171646118164'''

2. 在同目录下,准备一个执行cython编译的脚本:setup.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

filename = 'test'  # 源文件名
full_filename = 'test.pyx'  # 包含后缀的源文件名

setup(
    cmdclass={'build_ext': build_ext},
    ext_modules=[Extension(filename, [full_filename])]  # 配置需要cython编译的源文件
)

3.CMD进入该目录,执行  python setup.py build_ext --inplace

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如果出现“error: Unable to find vcvarsall.bat”的错误

Python3.5在Windows环境下安装一些模块时,会出现“error: Unable to find vcvarsall.bat”的错误,主要原因是因为Python的Setup需要调用vcvarsall.bat的文件,这个文件在C++的编程环境中才会有。有两种方法解决:安装MinGW;安装VS。安装VS的方法比较彻底一些,适用于python各个版本。

1. 检查Python安装路径中的_msvccompiler.py文件看需要什么版本的VS。

  一般的路径:C:\python35\Lib\distutils\_msvccompiler.py

  在该文件中找到_find_vcvarsall方法,其中类似“if version >= 14 and version > best_version:”的语句中,这里是14说明要VS的版本在14及以上才可以,那么要安装的就是VS2015。(其他的版本,如9就是需要VS10即可)

VS下载地址:https://my.visualstudio.com/Downloads?q=Visual

2. 下载安装VS2015。在安装时,一定要勾选C++环境,以及Python Tools for Visual Studio。我之前安装过VS2015,但是在Python中依然出现标题中的问题,原因就是没有选择这两个选项。如果在安装过程,出现了一直停留在“Configuring Your System”的问题,可以把VS进程杀掉试试。

原文:https://blog.csdn.net/youngwhz1/article/details/53303769 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

编译成功后,在同目录下会生成以下编译好的文件(后缀是.pyd) ,它可以被python直接import,为了import找错文件,我们这里删掉test.pyx

4.使用

import test
test.prime_num(100000)

'''run time:13.716325521469116'''
'''与之前相比大概快9s'''

5.与上述无关的内容,很好奇我用pypy试试

哎。。。。

pypy却快了将近20倍,实际上:这是因为我们仍旧采用纯python的语法来编写。这样尽管用cython来编译,执行的时候还是按照python的那一套来运行的。因此效率并不会提升。但是,正因为是用cython编译,我们可以在test.pyx上对源代码进行修改,加入C语言的一些语法,这样就能快很多了。
 

猜你喜欢

转载自blog.csdn.net/rookie_is_me/article/details/88421373