中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyPy?是怎么讓Python代碼運行得和C一樣快

發布時間:2022-01-19 13:27:52 來源:億速云 閱讀:138 作者:柒染 欄目:開發技術

這篇文章的內容主要圍繞PyPy 是怎么讓Python代碼運行得和C一樣快進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

    1. 引言

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

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

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

    幸運的是,我偶然發現了該問題的解決方案: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")

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

    對比結果如下:

    PyPy?是怎么讓Python代碼運行得和C一樣快

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

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

    需要注意的是:

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

    3. 刨根問底

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

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

    3.1 提前編譯

    PyPy?是怎么讓Python代碼運行得和C一樣快

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

    3.2 語言可解釋性

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

    PyPy?是怎么讓Python代碼運行得和C一樣快

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

    3.3 即時編譯

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

    PyPy?是怎么讓Python代碼運行得和C一樣快

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

    感謝你的閱讀,相信你對“PyPy 是怎么讓Python代碼運行得和C一樣快”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    五常市| 巩义市| 南通市| 米易县| 茂名市| 福鼎市| 河北省| 丰原市| 龙山县| 汉沽区| 蚌埠市| 抚宁县| 汤阴县| 民乐县| 玉龙| 辽阳市| 金华市| 留坝县| 邮箱| 太湖县| 丹巴县| 缙云县| 武城县| 海口市| 巴里| 壶关县| 万全县| 托克托县| 兰溪市| 化德县| 青河县| 理塘县| 镇平县| 涿鹿县| 若尔盖县| 闽清县| 隆林| 乡城县| 湖北省| 丹阳市| 酉阳|