欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyPy?如何讓Python代碼運行得和C一樣快

 更新時間:2022年01月26日 17:18:49   作者:趙卓不凡  
這篇文章主要介紹了如何讓Python代碼運行得和C一樣快,由于?PyPy?只是?Python?的一種替代實現(xiàn),大多數(shù)時候它都是開箱即用,無需對?Python?項目進行任何更改。它與?Web?框架?Django、科學計算包?Numpy?和許多其他包完全兼容,推薦大家多多使用

1. 引言

作為一名算法工程師,如何快速實現(xiàn)一個想法并驗證它是否有效對日常工作至關(guān)重要。Python 是一個出色的工具,可以很方便地實現(xiàn)這一點。它允許我們專注于想法本身,而不會被繁雜的代碼實現(xiàn)所困擾。

然而,小伙伴們一定都聽說過,Python腳本語言有一個致命缺點:相比比 C 或 C++ 等編譯語言Python運行慢得多。那么,在我們通過構(gòu)建 Python 快速實現(xiàn)了一個想法之后,現(xiàn)在我們想將它變成一個快速且高性能的工具,我們該怎么辦?通常情況下,我們最終會耗費大概兩倍的時間來將 Python 代碼手動轉(zhuǎn)換為 C/C++。

但是如果我們的 Python 代碼本身可以運行得更快,那不是很好嗎?那么如何實現(xiàn)呢?

幸運的是,我偶然發(fā)現(xiàn)了該問題的解決方案:PyPy,它是 Python運行時快速的替代品。

2. 舉個栗子

為了直觀對比 PyPy可以提升多少加速效果,我在以下示例中同時運行了默認的 Python 解釋器和 使用PyPy,

代碼如下:

import time
from termcolor import colored

start = time.time()
number = 0
for i in range(100000000):
? ? number += i
? ??
print(colored("FINISHED", "green"))
print(f"Ellapsed time: {time.time() - start} s")

簡單來說,上述腳本在一個循環(huán)中將 0 到 100,000,000 之間的所有整數(shù)相加,并在完成時打印一條消息和整個代碼腳本運行時間。

對比結(jié)果如下:

盡管只是簡單的對比,但上述例子的加速效果仍然令人興奮。與大約需要 10 秒的默認 Python 解釋器相比,PyPy 僅在 0.22 秒后就完成了執(zhí)行!另外,請注意,我們可以直接將 Python 代碼提供給 PyPy,而無需對代碼做任何更改。

當我們將其與 C語言實現(xiàn)的版本進行比較時,結(jié)果會更加令人印象深刻。在我的電腦上,C 中的等效實現(xiàn)需要 0.32 秒。盡管在大多數(shù)情況下 C 總體上仍然是速度大師,但 PyPy 在某些情況下可以擊敗 C。

需要注意的是:

當我們的程序大部分運行時間都來自于調(diào)用非 python 庫(比如Cpython)時,PyPy 的效率會降低。但是,如果我們有一個緩慢的程序,大部分時間都花在執(zhí)行調(diào)用 Python庫相關(guān)代碼上時,那么 PyPy 可以極大地提升代碼的運行效率。

3. 刨根問底

如果你也是第一次遇到 PyPy,那么您可能會問自己"PyPy運行這么快的背后原理是啥?"
額。。。 回顧我們的實驗,我們運行完全相同的代碼,并且使用 PyPy 似乎可以免費獲得巨大的加速,黑科技哎。。。

其實盡管代碼完全相同,但兩種方式下的代碼的執(zhí)行方式卻大不相同。 PyPy 性能提升的秘訣在于即時編譯,簡稱 JIT 編譯。

3.1 提前編譯

C、C++ 以及 Swift、Haskell、Rust 等編程語言都是提前編譯的。這意味著,在我們用這些語言編寫了一些代碼之后,需要點擊一個build按鈕,編譯器就會將源代碼轉(zhuǎn)換為機器可讀的代碼,由一種特定的計算機架構(gòu)讀取。每當執(zhí)行程序時,您的原始源代碼早已不復(fù)存在。執(zhí)行的只是機器代碼。

3.2 語言可解釋性

Python、JavaScript、PHP 等類似開發(fā)語言采用不同的方法。它們都是可以被解釋的。與將源代碼轉(zhuǎn)換為機器代碼相比,源代碼保持不變。每次程序運行時,解釋器都會逐行“查看”代碼并為我們運行它。

對于 JavaScript,每個 Web 瀏覽器都內(nèi)置了一個解釋器。標準的 Python 解釋器稱為 CPython。但是,區(qū)分 Python 語言腳本和運行代碼的解釋器工具是非常重要的,那是因為我們可以擁有完全不同的工具,它們都具有運行 Python 代碼的能力。這就是 PyPy 發(fā)揮作用的地方。

3.3 即時編譯

PyPy 是利用即時編譯的 Python 的替代實現(xiàn)。背后的原理是 PyPy 開始時就像一個解釋器,直接從源文件運行我們的 Python 代碼。但是,PyPy 不是逐行運行代碼,而是在執(zhí)行它們之前將部分代碼編譯為機器代碼,可以說是及時。

從這個意義上說,JIT 編譯是解釋和提前編譯的結(jié)合。這樣,我們不僅獲得了提前編譯的性能提升,而且解釋性語言的靈活性和跨平臺可用性也保留了下來。

4. 總結(jié)

現(xiàn)在我們了解了 PyPy 如何實現(xiàn)驚人的性能提升背后的原理。在官網(wǎng) pypy.org 上免費提供PyPy安裝包。除了工具本身,該網(wǎng)站還包含大量關(guān)于微調(diào) Python 程序以進一步提高性能的技巧。由于 PyPy 只是 Python 的一種替代實現(xiàn),大多數(shù)時候它都是開箱即用,無需對 Python 項目進行任何更改。它與 Web 框架 Django、科學計算包 Numpy 和許多其他包完全兼容,推薦大家多多使用。

到此這篇關(guān)于 PyPy 如何讓Python代碼運行得和C一樣快的文章就介紹到這了,更多相關(guān)讓 Python代碼運行得和C一樣快內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • tensorflow常用函數(shù)API介紹

    tensorflow常用函數(shù)API介紹

    這篇文章主要介紹了tensorflow常用函數(shù)API介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Python 實現(xiàn)二叉查找樹的示例代碼

    Python 實現(xiàn)二叉查找樹的示例代碼

    這篇文章主要介紹了Python 實現(xiàn)二叉查找樹的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python正則表達式之re.match()與re.search()的用法及區(qū)別

    python正則表達式之re.match()與re.search()的用法及區(qū)別

    本文主要介紹了python正則表達式之re.match()與re.search()的用法及區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • python selenium firefox使用詳解

    python selenium firefox使用詳解

    這篇文章主要介紹了python selenium firefox使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • python?selenium保存圖片最好的兩種方法

    python?selenium保存圖片最好的兩種方法

    大家好,本篇文章主要講的是python?selenium保存圖片最好的兩種方法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Python IDE Pycharm中的快捷鍵列表用法

    Python IDE Pycharm中的快捷鍵列表用法

    在本篇文章里小編給大家整理的是關(guān)于Python IDE Pycharm中的快捷鍵列表用法,需要的朋友們收藏下
    2019-08-08
  • python實現(xiàn)圖書借閱系統(tǒng)

    python實現(xiàn)圖書借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)圖書借閱系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解Python 3.10 中的新功能和變化

    詳解Python 3.10 中的新功能和變化

    這篇文章主要介紹了詳解Python 3.10 中的新功能和變化,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • python密碼學列置換密碼學習

    python密碼學列置換密碼學習

    這篇文章主要為大家介紹了python密碼學列置換密碼學習的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 在CMD窗口中調(diào)用python函數(shù)的實現(xiàn)

    在CMD窗口中調(diào)用python函數(shù)的實現(xiàn)

    本文主要介紹了在CMD窗口中調(diào)用python函數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論