【Pythonを簡単に高速化】cachetoolsのインストール

【Pythonを簡単に高速化】cachetoolsのインストール プログラミング

「Pythonでの処理を高速化したい」
「Pythonでキャッシュを利用したい」
「MemcachedやRedisなどを利用できる環境ではない」

このような場合には、cachetoolsがオススメです。
この記事では、Pythonの高速化ができるcachetoolsについて解説しています。

本記事の内容

  • cachetoolsとは?
  • cachetoolsのシステム要件
  • cachetoolsのインストール
  • cachetoolsの動作確認

それでは、上記に沿って解説していきます。

cachetoolsとは?

cachetoolsとは、キャッシュ機能を提供するPythonライブラリです。
キャッシュ機能を利用すれば、処理を高速化できるにようになります。

利用方法としては、Pythonデコレータとして利用します。
そのため、既存コードを変更する必要がありません。

ただし、関数化を適切にしておく必要はあります。
関数化を適切にできていれば、cachetoolsの恩恵を大きく受けることができます。

また、cachetoolsには次のキャッシュアルゴリズムが用意されています。

しかし、cachetoolsにおいてはそれらは必要ありません。
すべてPythonで開発されており、大袈裟なことにはなりません。

したがって、気軽にcachetoolsを試すことができます。

以上、cachetoolsについて説明しました。
次は、cachetoolsのシステム要件を説明します。

cachetoolsのシステム要件

現時点(2022年8月)でのcachetoolsの最新バージョンは、5.2.0となります。
この最新バージョンは、2022年5月30日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

これは、以下のPython公式開発サイクル通りです。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

なお、Python 3.6のサポートは2021年で終了しています。

以上、cachetoolsのシステム要件を説明しました。
次は、cachetoolsのインストールを説明します。

cachetoolsのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2.2
setuptools 63.4.2
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、cachetoolsのインストールです。
cachetoolsのインストールは、以下のコマンドとなります。

pip install cachetools

cachetoolsのインストールは、すぐに終わります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package    Version
---------- -------
cachetools 5.2.0
pip        22.2.2
setuptools 63.4.2
wheel      0.36.2

cachetoolsが依存するパッケージは、ありません。
そのため、cachetoolsは既存環境に容易に導入可能です。

このことにより、Python処理の高速化を気軽に試せます。

以上、cachetoolsのインストールを説明しました。
次は、cachetoolsの動作確認を説明します。

cachetoolsの動作確認

cachetoolsの動作確認を行います。
まずは、cachetoolsを利用せずに重たい処理を実行してみましょう。

重たい処理には、フィボナッチ数列の計算を行うようにします。

import time


def fib(n):
    """Compute the nth number in the Fibonacci sequence"""
    return n if n < 2 else fib(n - 1) + fib(n - 2)


if __name__ == '__main__':
    start = time.time()
    print(fib(42))
    elapsed_time = time.time() - start
    print("経過時間:{0}".format(elapsed_time) + "[秒]")

上記を実行した結果は、以下。

267914296
経過時間:92.57384753227234[秒]

約92秒の時間がかかりました。
この処理をcachetoolsを使って、高速化してみましょう。

cachetoolsを用いてフィボナッチ数列の計算(fib関数)を高速化したコードは、以下。

import time
from cachetools import cached


@cached(cache={})
def fib(n):
    """Compute the nth number in the Fibonacci sequence"""
    return n if n < 2 else fib(n - 1) + fib(n - 2)


if __name__ == '__main__':
    start = time.time()
    print(fib(42))
    elapsed_time = time.time() - start
    print("経過時間:{0}".format(elapsed_time) + "[秒]")

追記したのは、以下のコードだけです。

from cachetools import cached


@cached(cache={})

Pythonのデコレータという機能を用いています。
デコレータの利用により、既存関数(fib関数)を改修しています。

デコレータについては、とりあえずこの辺にしておきます。
cachetoolsで高速化したコードを実行した結果は、以下になります。

267914296
経過時間:0.00025153160095214844[秒]

それぞれの結果をまとめたのが、次の表です。

cachetoolsなしcachetoolsあり
92.57384753227234秒0.00025153160095214844秒

桁が違いますね。
別次元と言った方が、適切かもしれません。

もちろん、これは顕著な例なのでしょう。
cachetools公式サイトで紹介されているコードですからね。

そうだとしても、ここまで結果に差が出ることは注目すべきです。
使いようによっては、かなりの効果(高速化)を得られます。

以上、cachetoolsの動作確認を説明しました。

タイトルとURLをコピーしました