Python3.11はホントに速いのか?

2022/11/05 19:37

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

Python3.11は、CPython高速化計画が含まれる最初のリリースです。

詳細は python.jpの記事 を参照してください。

4年で5倍の高速化を目標にしているらしいですが、現実としてどの程度高速化されるのか。試してみました。

使った環境

OS

Mac mini (M1, 2020)、Apple M1のメモリ16GBモデルで実施しました。

OSはmacOS Monterey 12.6.1です。

Python

Pythonは、www.python.orgから3.10の最新版(3.10.8)と3.11の最新版(3.11.0)のユニバーサルインストーラーをダウンロードしてインストールしました。

動作確認用にvenvを作成しました。

  $ /Library/Frameworks/Python.framework/Versions/3.10/bin/python3 -m venv ~/envs/python3_10_8
  $ /Library/Frameworks/Python.framework/Versions/3.11/bin/python3 -m venv ~/envs/python3_11_0

静的サイトジェネレーターとデータ

本ホームページで使っている自前の静的サイトジェネレーター biisan と、本ホームページのデータを使いました。

データは2003年からのおよそ20年分、746個のrstファイルを処理します。

biisan はファイルを生成して書き出す前に、書き出し対象のファイルと差分があるか確認して差分がなければ書き出しません。

よって、restructuredテキストのreadと、htmlファイルのreadが大量に発生しますが、writeはほとんど発生しません。feed用のxmlファイルには生成時刻が入るので、1ファイルだけwriteがあります。

また、 biisan はmultiprocessingで動作しますが、Poolは8に設定しています。

計測

計測方法

起動モジュールのmain関数内で、timeモジュールのperf_counterを使いました。

  if __name__ == '__main__':
      import time
      _start = time.perf_counter()
      print_fire_message()
      prepare()
      main()
      _end = time.perf_counter()
      print(_end - _start)

それぞれ、5回ずつ実施します。試行回数少ないですし、感覚値で。

  >>> python3_10_8 = (1.9288293329991575 + 1.8492334170005051 + 1.838625749998755 + 1.8504197920010483 + 1.854418999999325) / 5
  >>> python3_11_0 = (1.72897891699904 + 1.6377688749998924 + 1.6208801659995515 + 1.617007624998223 + 1.6387562090021675) / 5
  >>> (python3_11_0 / python3_10_8) * 100 - 100
  -11.56608210464978

結果

11.5%くらい速くなった?

これは4年後が楽しみでは!?

また、来年3.12でやってみよう。

Prev Entry

Next Entry