dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

Cython でお手軽に python プログラムを高速化

2018-12-02 16:46:59 | python
Cython でお手軽に python プログラムを高速化する方法のメモ。

C/C++ を使わずに、以下だけで高速化します。
・メソッドの引数に型宣言を追加
・メソッド内の変数の型宣言を追加


まず、python プログラム(~.py) に以下の変更を行って、~.pyx を作成します。

※主な型
整数: int
文字列: unicode
リスト: list
辞書: dict

■bar_lib.py
def bar(n, ts, idx):
    nts = ts[idx:idx+n]
    nkey = "\t".join([t['key'] for t in nts])
    return nkey


■bar_lib.pyx
# cython: language_level=3

# メソッドの引数の型を追加
def bar(int n, list ts, int idx):
    # メソッド内の変数の型を定義
    cdef list nts
    cdef dict t
    cdef unicode nkey

    nts = ts[idx:idx+n]
    nkey = u"\t".join([t['key'] for t in nts])
    return nkey


次に、setup.py ファイルを作成します。
from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize(['bar_lib.pyx']))

※複数の .pyx がある場合には、リストに .pyx ファイルを追加します

そして、setup.py を実行します。
python setup.py build_ext --inplace

bar_lib を import すれば、bar() を実行できます。

■foo.py
import bar_lib

def run():
  bar_lib.bar()

if __name__== '__main__':
  run()

この記事についてブログを書く
« python で行単位でプロファイ... | トップ | cython.view.array の使い方 »

python」カテゴリの最新記事