Pythonには高速化方法がいくつかあります。
組み込みのモジュールやパッケージなんかは高速なプログラミング言語で作られていますし、サードパーティ製のものも大抵高速な言語で作られています。
一般的な高速化の例としては
などが挙げられます。
今回はこれらの中でも特にお手軽な高速化方法を紹介したいと思います。
アルゴリズム見直しによる高速化
たとえば総和を求めるプログラムを考えてみます。
何も考えずに10000000までの整数をforループで1回ずつ足していくと、
total = 0
for i in range(1, limit + 1):
total += i
print(total)
50000005000000
elapsed : 459.067 ms
これだけ時間がかかります。これを総和の公式で計算すると
total = limit * (limit + 1) // 2
print(total)
50000005000000
elapsed : 26.000 μs
約17000倍高速になりました。
極端な例ですが、余計な計算はしないほうがいいという良い例だと思います。
Pythonコンパイラを使って高速化
スクリプト言語であるPythonをコンパイル型の高速な言語に変換してしまおうというものです。
お手軽に高速化できる反面、Python独自の機能は使えないという本末転倒なもので、個人的にあまり好きではありません。
Numbaで高速化
使い方は簡単で、Numbaをインストールしてnumba.jitデコレータをコンパイルしたい関数に付けるだけです。
pip install numba
from numba import jit
@jit
def for_loop():
total = 0
for i in range(1, limit + 1):
total += i
print(total)
50000005000000
elapsed : 265.959 ms
Codonで高速化
以前紹介したCodonでももちろん高速化可能です。
「windows codon」でのリーチ数がやけに多いので、今回は擬似的にWindowsからCodonを使用する方法を紹介したいと思います。
WSL2をインストール
PowerShellまたはコマンドプロンプトを管理者として開きます。
「
そしたら以下の内容をコピペしてエンターを押します。
wsl --install
再起動を促されたら再起動してください。
うまく動かないときは検索ウィンドウ等から「Windowsの機能の有効化または無効化」を開き、「Linux用Windowsサブシステム」「Windowsハイパーバイザープラットフォーム」「仮想マシンプラットフォーム」にチェックが入っていることを確認してください。
これでもうまくいかないときはBIOS設定から「Intel Virtualization Technology (VT-x)」を探してい「Enabled」にしたり、管理者権限のPowerShellかコマンドプロンプトから以下のコマンドを実行してみてください。
bcdedit /set hypervisorlaunchtype auto
うまくいけばUbuntuがインストールされると思います。
初回起動時にユーザー名とパスワードを入力させられると思うので、入力してください。
Codonをインストール
下記記事などを参考にインストールしてください。
Visual Studio Codeをインストール
ここからインストーラーをダウンロードし、インストールしてください。
拡張機能のインストール
拡張機能の「Remote Development」をインストールしてください。
Linux側からVisual Studio Codeを開く
上記でインストールしたLinux(デフォルトではUbuntu)を起動してください。
ubuntu.exe
起動したら起動したLinux上で以下のコマンドを実行してください。
「code」がVisual Studio Codeの実行コマンドで、その後の「.」は今いるフォルダを意味します。
「.」の部分は開きたいフォルダの名前に変更してもOKです。
code .
何かしらのログが表示されてVisual Studio Codeが起動します。
開いたLinux上のファイルが表示され、「Ctrl + @」でLinuxのターミナルが開けば成功です。
これで擬似的にWindows上からCodonが使用できます。
正式なWindows対応
結論から言うと期待しないほうがいいです。
branch一覧には一応Windowsブランチがありますが、開発は進んでいません。
まとめ
長くなってしまったので今回はここで〆ます。
気が向いたら他の高速化方法もいつかご紹介しようと思います。
コメント