ホームページ > バックエンド開発 > Python チュートリアル > Python で LRU キャッシュをクリアする

Python で LRU キャッシュをクリアする

王林
リリース: 2023-09-10 12:57:04
転載
1084 人が閲覧しました

Python で LRU キャッシュをクリアする

この記事では、Python に実装された LRU キャッシュをクリアする方法を学びます。コーディングの側面を深く掘り下げる前に、LRU キャッシュとは何か、そしてその理由について少し調べてみましょう。人気があります。

LRU キャッシュは、最も最近使用されていないキャッシュとも呼ばれ、頻繁に使用されるデータへのアクセスに必要な時間を短縮することでアプリケーションのパフォーマンスを向上させるためにコンピューター サイエンスで広く使用されているデータ構造です。 LRU キャッシュには限られた数のアイテムが保存され、キャッシュがいっぱいになると、最も最近使用されていないアイテムが削除されます。これにより、最も頻繁に使用される項目がキャッシュに残り、すぐにアクセスできるようになりますが、使用頻度の低い項目は削除されて新しい項目のためのスペースが確保されます。

LRU キャッシュは、ディスク I/O やネットワーク アクセスなど、データの取得にコストがかかるアプリケーションで特に役立ちます。このような場合、頻繁に使用されるデータをメモリにキャッシュすると、データの取得に必要なコストのかかる操作の数が減り、アプリケーションのパフォーマンスが大幅に向上します。

LRU キャッシュは、データベース、Web サーバー、コンパイラ、オペレーティング システムなど、さまざまなアプリケーションで使用されており、検索エンジンやデータなど、大量のデータに頻繁にアクセスする必要があるアプリケーションで特に役立ちます。分析プラットフォーム.

Python での LRU キャッシュとの対話

Python 3.2 以降では、functools モジュールに、プログラマが LRU キャッシュと対話できるようにする強力な機能が含まれています。この機能は、クラスまたは関数定義の上に配置されたデコレータを使用することで利用できます。このデコレータを頻繁な変数へのアクセスと変更を必要とする関数では、関数のパフォーマンスを大幅に向上させることができます。

大量のデータの処理や複雑な計算を必要とする関数を操作する場合、LRU キャッシュを使用すると、実行時間を大幅に短縮できます。これは、LRU キャッシュが頻繁に使用されるデータをメモリに保存するためです。時間のかかる I/O 操作のコストを発生させることなく、データに迅速にアクセスして処理する機能。

LRU キャッシュを利用することで、Python プログラマはアプリケーションの実行時間を短縮し、パフォーマンスを向上させることができます。これは、大規模なアプリケーションやリアルタイム データ処理を必要とするアプリケーションを扱う場合に特に重要です。パフォーマンスが大幅に向上する可能性があります。

つまり、Python の functools モジュールは、LRU キャッシュと対話するための強力なメカニズムを提供します。 LRU キャッシュを使用すると、プログラマはコストのかかる変数アクセスや変更操作に必要な時間を削減し、アプリケーションのパフォーマンスを向上させることができます。 LRU キャッシュの使用は、リアルタイムのデータ処理を必要とするアプリケーションや大量のデータを処理するアプリケーションで特に有益です。

LRU キャッシュについて少し理解したところで、Python でそれを利用してみましょう。

Python の functools モジュールのキャッシュクリア()メソッドを使用して、LRU (最も最近使用されていない) キャッシュをクリアできます。

この手法を使用すると、キャッシュが完全にクリアされます。

サンプルコードスニペット

リーリー ###説明###

上記の例では、some_function は lru_cache で修飾されており、最大サイズ 128 の LRU キャッシュが作成されます。キャッシュをクリアするには、関数オブジェクトで cache_clear() メソッドを呼び出します。これにより、すべてのエントリが削除されます。キャッシュから。

cache_clear() を呼び出すと、すべてのパラメータのキャッシュがクリアされることに注意してください。特定のパラメーターのキャッシュをクリアする場合は、 functools.typed_lru_cache などの別のキャッシュ実装を使用できます。これにより、パラメーターを指定して queue_clear() メソッドを使用して、特定のパラメーターのキャッシュをクリアできます。

次に、上記のコードを使用して実際の例を作成してみましょう。

以下に示すコードを考えてみましょう。

Example

の中国語訳は次のとおりです:

Example

リーリー ###説明###

この例では、フィボナッチ関数は lru_cache を使用して結果をメモ化します。キャッシュの最大サイズは 128 なので、関数は最新の 128 回の呼び出しの結果を記憶します。

最初にいくつかの引数を指定して関数を呼び出し、キャッシュにデータを追加します。次に、cache_clear() メソッドを使用してキャッシュをクリアします。最後に、同じ引数を指定して関数を再度呼び出し、キャッシュされた関数を使用する代わりに再計算されることを確認します。結果。###

上記のコードを実行するには、以下に示すコマンドを実行する必要があります。

######指示###### リーリー

上記のコマンドを実行すると、以下に示すような出力が表示されるはずです。

###出力### リーリー

必要に応じて、上記のコードでキャッシュの現在の状態情報を出力することもできますが、そのためには、cache_info() メソッドを使用する必要があります。

以下に示す更新されたコードを検討してください。

Example

の中国語訳は次のとおりです: Example リーリー ###説明###

上記のコードでは、@lru キャッシュ デコレーターは、キャッシュの最大サイズを指定するオプションのパラメーター maxsize を受け入れます。

maxsize が定義されていない場合、キャッシュ サイズは無制限です。

如果缓存已满,最近最少使用的项目将被移除,以为新项目腾出空间。

The function object itself houses the cache that @lru cache uses.

Accordingly, the cache is private to the function and is not shared by other versions of the function. Also, the different part here is the cache_info() method, which is used to print information about the LRU cache used by the fibonacci function. This includes the number of cache hits and misses, as well as the size of the cache.

要运行上述代码,我们需要运行下面显示的命令。

Command

python3 main.py
ログイン後にコピー

一旦我们运行上述命令,我们应该期望输出类似于下面所示的输出。

Output

55
610
CacheInfo(hits=14, misses=16, maxsize=128, currsize=16)
55
CacheInfo(hits=8, misses=11, maxsize=128, currsize=11)
ログイン後にコピー

现在我们已经看到了如何清除缓存,让我们在另一个例子中使用它。

考虑下面显示的代码。

Example

的中文翻译为:

示例

from functools import lru_cache

@lru_cache(maxsize=128)
def edit_distance(s1, s2):
	"""
	Compute the edit distance between two strings using dynamic programming.
	"""
	if not s1:
    	return len(s2)
	elif not s2:
    	return len(s1)
	elif s1[0] == s2[0]:
    	return edit_distance(s1[1:], s2[1:])
	else:
    	d1 = edit_distance(s1[1:], s2) + 1  # deletion
    	d2 = edit_distance(s1, s2[1:]) + 1  # insertion
    	d3 = edit_distance(s1[1:], s2[1:]) + 1  # substitution
    	return min(d1, d2, d3)

# Call the function with some arguments to populate the cache
print(edit_distance("kitten", "sitting"))  # Output: 3
print(edit_distance("abcde", "vwxyz"))	# Output: 5

# Clear the cache
edit_distance.cache_clear()

# Call the function again to see that it's recomputed
print(edit_distance("kitten", "sitting"))  # Output: 3
ログイン後にコピー

Explanation

In this example, the edit_distance function computes the edit distance between two strings using dynamic programming. The function is recursive and has three base cases: if one of the strings is empty, the edit distance is the length of the other string; if the first characters of the two strings are the same, the edit distance is the edit distance between the rest of the strings; otherwise, the edit distance is the minimum of the edit distances for the three possible operations: deletion, insertion, and substitution.

为了提高函数的性能,我们使用lru_cache来缓存其结果。缓存的最大大小为128,因此函数将记住最近128次调用的结果。这样可以避免为相同的参数重新计算编辑距离。

We first call the function with some arguments to populate the cache. Then, we clear the cache using the cache_clear() method. Finally, we call the function again with the same argument to see that it's recomputed instead of using the cached result.

请注意,edit_distance函数只是一个示例,计算两个字符串之间的编辑距离还有更高效的方法(例如使用Wagner−Fischer算法)。这个示例的目的是演示如何使用lru_cache来记忆递归函数的结果。

结论

总之,在某些情况下,清除Python中的LRU(最近最少使用)缓存可能是重要的,以管理内存并确保缓存保持最新。LRU缓存是Python的functools模块提供的内置缓存机制,可以根据函数的参数缓存函数的结果。@lru_cache装饰器用于为函数启用缓存,可以指定maxsize来设置缓存大小的限制。

修饰的函数对象的cache clear()方法可用于清除LRU缓存。通过清除所有缓存结果,该技术使缓存保持最新,同时释放内存。如果函数被更新或输入数据经常变化,清除缓存可能是必要的。

总的来说,LRU缓存提供了一种简单而有效的方法来提高Python函数的性能,特别是那些计算密集型的函数或者被多次使用相同参数调用的函数。在必要时清除缓存可以帮助保持通过缓存获得的性能提升,并确保缓存在减少计算时间方面保持有效。

以上がPython で LRU キャッシュをクリアするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート