CythonPython變得更快

      網友投稿 1498 2022-05-30

      1 Cython 概述

      根據百度百科和Cython官網(http://docs.cython.org)的文檔,Cython可以看作是一種編程語言,是Python語言的一個超集,目標是構建一個高級、面向對象、函數式和動態編程語言。Cython主要特性是支持可選的靜態類型聲明,這樣可以將Python源碼解析為C或C++代碼,并編譯為Python擴展模塊。這種特征可以非常方便的將Python與外部C庫的進行集成和交互,同時保留Python語言的簡單性。總之一句話,Cython可以綜合Python的易用性和C語言的高效率。

      注意:這里需要注意Cython和CPython的區別,前者是一種編程語言,而CPython是C語言編寫的Python解析器。

      2 Cython 安裝

      Cython的安裝前置條件是需要一個C編譯器,不同的操作系統需要的C編譯器一般不同。下面給出不同操作系統的C編譯器安裝環境:

      Linux操作系統:可以非常方便的安裝C編譯器 gcc,一般在開發環境中都自帶此包,如果沒有,可以通過在線安裝完成。比如在Ubuntu操作系統上,可以執行sudo apt get install build sential命令獲取gcc。

      Mac OS X操作系統 :建議通過安裝XCode工具來完成C編譯器gcc的安裝,或者從網站上單獨下載完成安裝。

      Windows操作系統:需要安裝Microsoft Visual C/C++(MSVC)或開源的MinGW(gcc的Windows發行版)。

      關于Cython需要的C編譯器環境的安裝,這里不再贅述。下面以Ubuntu操作系統為例來說明如何安裝Cython庫。這里已經完成了Python3的基本環境搭建,可以執行如下命令:

      Cython 讓Python變得更快

      #安裝pip apt install python3-pip #升級pip pip3.6 install pip --upgrade #安裝Cython pip3.6 install Cython

      如果pip環境之前已經構建好,則可以直接執行 pip3.6 install Cython 即可,或者如果Python環境搭建不同,也可以執行pip3 install Cython或者pip3.7 install Cython。這里需要根據自己的實際情況來決定。

      3 PyCharm安裝

      這里我們介紹一下如何在Ubuntu操作系統上安裝Python開發工具PyCharm,這里可以下載社區版即可。Ubuntu操作系統上下載的是一個壓縮包,解壓后即可使用,可以通過瀏覽器進行下載,我這里的具體界面如下所示:

      下載完成后,可以將此 pycharm-community-2021.2.3.tar.gz 壓縮文件移動到需要的目錄中,并切換到當前目錄后,執行如下命令進行解壓安裝:

      tar -zxvf pycharm-community-2021.2.3.tar.gz

      解壓后,進入目錄,然后再進入bin目錄,具體執行如下命令即可啟動程序:

      cd pycharm-community-2021.2.3 cd bin ls ################################################# brokenPlugins.db idea.properties ltedit.sh pycharm.sh format.sh inspect.sh printenv.py pycharm.svg fsnotifier libdbm64.so pycharm64.vmoptions restart.py icons.db log.xml pycharm.png ################################################# .\pycharm.sh

      啟動界面后,需要同意相關協議,并可以創建項目,這里需要配置Python解析器環境,這里需要根據實際情況進行設置。界面如下所示:

      至此,我們的開發環境就基本構建完成了。這里可以創建一個Python項目備用。

      4 Cython 編譯過程

      這里我們可以參考官網 http://docs.cython.org/en/latest/src/quickstart/build.html 的文檔,一般來說,Cython編譯過程主要由下面的2步驟構成:

      (1)首先將Python源碼( .py 或 .pyx 文件)通過Cython編譯器翻譯為 .c 文件, 此文件包含Python擴展模塊( extension module)

      (2)將第一步生成的 .c 文件通過C編譯器(gcc)編譯為 .so 文件(Linux操作系統)或 .pyd 文件(Windows操作系統)。這些 .so 文件或 .pyd 文件可以直接被 Python通過模塊進行導入。

      這個過程一般需要編寫一個setuptools 文件 setup.py 來完成。官網給出了一個 setup.py一般結構,具體如下所示:

      from setuptools import setup from Cython.Build import cythonize setup( name='Hello world app', ext_modules=cythonize("hello.pyx"), zip_safe=False, )

      5 Cython Hello示例

      這里參考官網 http://docs.cython.org/en/latest/src/quickstart/build.html 的文檔,給出一個Cython入門的Hello示例,首先在PyCharm項目中添加一個hello.pyx文件,.pyx 文件是由 Cython 編程語言編寫而成的 Python 擴展模塊源代碼文件,一般來說,不能直接被Python 識別,即不可導入。內容如下所示:

      def my_sum(n): s = 0 for i in range(n + 1): s += i print("sum(", n, ")=>", s)

      就是簡單的定義了一個my_sum函數,傳遞一個參數n,在內部進行求和,并通過print打印。然后再添加一個安裝工具setuptools 文件 setup.py,內容如下所示:

      from setuptools import setup from Cython.Build import cythonize setup( name='Cython Hello Demo', ext_modules=cythonize("hello.pyx"), zip_safe=False, )

      首先需要從setuptools模塊中導入setup函數,同時從Cython.Build模塊中導入cythonize方法,然后在setup函數中,通過 ext_modules=cythonize("hello.pyx")指定需要編譯的擴展模塊文件名。

      然后執行如下命令進行編譯:

      python3.6 setup.py build_ext --inplace

      執行成功后,會生成如下文件,結構如下所示:

      為了對比性能,再添加一個hello03.py文件,內容如下所示:

      def my_sum_02(n): s = 0 for i in range(n + 1): s += i print("my_sum_02(", n, ")=>", s)

      與hello.pyx文件內容除了函數名不一致外,其他都是一樣的。下面給出main.py文件內容:

      import timeit if __name__ == '__main__': t1 = timeit.Timer("my_sum(1000)", "from hello import my_sum") print(t1.timeit(10000)) t2 = timeit.Timer("my_sum_02(1000)", "from hello03 import my_sum_02") print(t2.timeit(10000))

      其中的timeit可以方便的進行時間統計,來評估代碼的執行效率。第一個t1統計Cython編譯過的hello模塊中的方法my_sum執行時間,而第二個t2用來統計Python代碼hello03模塊的my_sum_02方法的執行時間。我這里的結果如下所示:

      1.0714793549996102 +++++++++++++++++ 1.9462227089989028

      由此可見,此示例中的Cython編譯過的代碼執行效率會高一些。

      gcc Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:揭秘Python數據科學,創造改變生活的學科!
      下一篇:FusionInsight Manager集成對接之通過Basic認證實現用戶操作
      相關文章
      国产精品亚洲综合| 亚洲午夜精品一区二区公牛电影院| 激情五月亚洲色图| 亚洲性一级理论片在线观看| 亚洲一区中文字幕久久| 亚洲无删减国产精品一区| 亚洲天堂中文资源| 亚洲欧洲精品国产区| 亚洲制服在线观看| jlzzjlzz亚洲jzjzjz| 亚洲中文字幕一二三四区| 亚洲精品久久无码av片俺去也| 亚洲国产精品自在自线观看| 人人狠狠综合久久亚洲| 国产精品日本亚洲777| 亚洲乱亚洲乱少妇无码| 国产亚洲成归v人片在线观看| 丝袜熟女国偷自产中文字幕亚洲| 国产亚洲精品福利在线无卡一| 亚洲人成无码网站| 亚洲AV无码专区国产乱码电影 | 亚洲国产欧美一区二区三区| 亚洲AV噜噜一区二区三区| 国产亚洲精品美女久久久久| 亚洲黄黄黄网站在线观看| 亚洲午夜无码久久久久| 亚洲大尺度无码专区尤物| 亚洲黄色网址大全| 77777午夜亚洲| 亚洲第一综合天堂另类专| 亚洲电影日韩精品 | 亚洲第一福利视频| 亚洲欧洲日韩国产| 亚洲一区AV无码少妇电影| 亚洲国产成人手机在线电影bd| 日本亚洲色大成网站www久久| 在线视频亚洲一区| 久久精品亚洲乱码伦伦中文| 亚洲国产精品一区二区第一页| 久久亚洲国产成人精品性色| 国产成人精品日本亚洲直接|