成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PyPy是不是真的比Python快?

開發 后端
眾所周知, Python 編寫的程序運行不快,這種慢雖無大礙,但為了獲得更高的性能,我們需要再切換到另一種編程語言嗎?不一定。我們可以放棄python.py的運行方式,轉而使用 PyPy 即時編譯器。

[[434458]]

眾所周知, Python 編寫的程序運行不快,這種慢雖無大礙,但為了獲得更高的性能,我們需要再切換到另一種編程語言嗎?不一定。我們可以放棄python.py的運行方式,轉而使用 PyPy 即時編譯器。

根據官方網站的說法,就連Python 創建者 Guido von Rossum 都建議將 PyPy 用于關鍵性能的 Python 程序。接下來我們看看 PyPy 有多快。

基準測試的工作原理

為了比較 Python 和 PyPy,我編寫了幾個 Python 程序。著名算法、典型用例,甚至是基本的 HTTP 服務器。然后我用 Python 和 PyPy 執行程序——在 macOS 和 Linux 的終端中使用time模塊,可以看到執行某事的持續時間。使用 time模塊 看起來像這樣:

  1. time python.py 

執行完成后,time模塊會報告您花費的時間。

使用的版本:

  1. PyPy:7.3.5,使用 Python 版本 3.7.10 
  2.  
  3. Python:版本 3.9.7 

這兩個版本都是目前可用的最新版本。程序本身不記錄任何內容。我們只關心進行計算。

這是準備好的代碼片段。讓我們對每個場景進行基準測試。

1. 斐波那契

以下函數生成我們傳遞給它的數字的斐波那契值。

結果:

Python 平均需要 2337 毫秒的執行時間。

PyPy 平均只需要 301 毫秒。明顯的贏家是 PyPy。

2. web服務

為了對 PyPy 和 Python 處理 HTTP 請求的性能進行基準測試,使用 time 命令測量時間是行不通的。有效的是“wrk”——一個基準測試工具,在服務器上觸發大量 HTTP 請求。

因此,它為我們提供了有關服務器平均響應速度以及它可以處理多少 HTTP 請求的數據。

上面顯示的 Web 服務器在端口 4000 上為目錄“app”提供服務。在這個目錄中,我創建了一個小的 hello-world HTML 文件。基準測試在終端中執行:

  1. wrk -t12 -c400 -d10s http://localhost:4000/ 

結果如下:

Python:Web 服務器平均每秒可以處理 995 個請求,平均延遲為 2.03 毫秒。

PyPy:Web 服務器平均每秒可以處理 1481 個請求,平均延遲為 1.90 毫秒。如您所見,PyPy 要快得多。

3. 快速排序

快速排序可能是最有效的排序算法。這是它在 Python 中的實現:

在 Quicksort 實現下面,我們生成了 500 個隨機數并將它們存儲在一個數組中。這個數組是 Quicksort 算法將要排序的。

結果如下:

Python:平均而言,代碼執行時間為 43 毫秒

PyPy:平均執行時間為 132 毫秒。

是的,Python 在這里更快。 這也可以在內部測量時間時確認,使用 start = time.time() 技巧。

4. 堆棧

棧是一種簡單的數據結構。它是一個數組的更漂亮的詞,我們在它上面推東西并從中彈出它。下面的代碼創建這個數組,在堆棧上壓入和彈出 1000 萬個數字:

讓我們看看兩者的速度有多快。

Python:代碼平均耗時 2.89 秒

PyPy:平均需要 69 毫秒。是的,我說的是毫秒。

在這個基準測試中,PyPy 比普通 Python 快幾個數量級。

5. SQlite3 Database

數據庫是大型項目中常用的東西。我選擇 SQLite 來做一個基準測試,因為它很容易與 Python 一起使用——不需要通過 pip 安裝任何東西。以下代碼在基于文件的 SQLite 數據庫中創建一個新表。

在每次基準測試之前,我刪除了數據庫文件并創建了一個普通的新文件。但是數據庫存儲什么?范圍函數生成一百萬個數字,然后將每個數字加倍——函數 f(n) = n * 2。數據庫存儲每個函數對,例如“2、4”或“18、36”。

結果:

Python 平均需要 6.7 秒來執行代碼。

PyPy 平均需要 9.4 秒的執行時間。

Python 更快。我還嘗試將其與其他操作結合使用——比如刪除剛剛創建的條目。它沒有改變結果。在 SQlite3 數據庫的情況下, Python 比 PyPy 快。

總的來說,這讓我很驚訝。當 Python 勝過 PyPy 時,并不是關于數量級的。由于我不是 Python 或 PyPy 專家,我不確定為什么 Python 在某些情況下更好。可能是因為 PyPy 是一個 JIT 編譯器,所以在運行它時,它首先編譯代碼。

另一方面,默認的 Python 解釋器不會這樣做。因此,對于 PyPy 的劣勢,JIT 編譯增加了一些所需的時間。盡管如此,PyPy 在某些情況下提供了更快的執行速度。 如您所見,它在 5 種情況下的 3 種情況下提供了更快的執行。 

原文:https://louispetrik.medium.com/pypy-vs-python-49153daca65c

 

責任編輯:武曉燕 來源: 新鈦云服
相關推薦

2025-03-18 12:30:00

RubyJava語言

2010-08-18 16:04:24

JavaC

2020-11-09 09:33:37

多線程

2021-09-30 07:26:15

磁盤IO網絡

2024-01-16 16:39:33

PythonPyPy

2017-06-28 10:08:03

打印機票據學生

2022-11-02 08:12:47

TurbopackVite

2024-01-09 18:00:22

團隊PyPy遷移開源

2016-11-15 09:43:56

大數據數據工程師

2022-06-08 09:20:58

Python基準測試編程語言

2015-06-23 16:14:42

程序員優秀程序員

2021-04-02 11:05:57

Python同步異步

2021-03-11 11:32:40

Python同步異步

2017-11-20 10:21:17

量子點顯示器OLED

2021-12-22 23:23:20

電池手機技術

2019-05-16 09:23:18

前端Title后端

2021-05-04 22:13:56

PyPyPythonC

2020-09-26 10:43:57

Python語言數據分析

2019-11-18 21:32:39

Docker容器平臺

2010-03-23 11:17:16

Python 動態編譯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本午夜精品 | 91麻豆久久久 | 久久久免费电影 | 欧美综合国产精品久久丁香 | 国产亚洲欧美在线 | 午夜影院| 免费日韩网站 | 一区二区三区国产视频 | 九九久久久 | 久久爱一区| 欧美一级二级在线观看 | 国产精品网址 | 欧美久久一区二区 | 欧美一级二级视频 | 99久久久久久99国产精品免 | 国产清纯白嫩初高生在线播放视频 | 欧美日韩在线观看一区 | 国产精品久久久久久久久久久久 | 999国产视频| www.99精品| 国产午夜精品一区二区三区嫩草 | 99色在线视频 | h肉视频 | 一区二区在线免费观看视频 | 国产精品成人久久久久a级 久久蜜桃av一区二区天堂 | 热re99久久精品国产99热 | av在线免费观看网站 | a级免费黄色片 | 国产精品美女久久久久aⅴ国产馆 | 毛片免费看的 | 国产精品成人一区二区三区 | 精品乱码一区二区 | 久久免费福利 | 精品国产久 | 日一区二区| 久久久久国产精品午夜一区 | 草久久 | se婷婷| 91亚洲免费 | 国产精品日韩欧美一区二区三区 | 亚洲欧美中文日韩在线v日本 |