]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-103475: cache() and lru_cache() do not have a "call once" guarantee (GH-103669)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Sat, 22 Apr 2023 14:18:25 +0000 (09:18 -0500)
committerGitHub <noreply@github.com>
Sat, 22 Apr 2023 14:18:25 +0000 (09:18 -0500)
Doc/library/functools.rst

index d1289ce836210a4acc325c016b04fe37041fa824..29cbc87bf66d1226c8eaafa06f3f581e3646e527 100644 (file)
@@ -49,8 +49,13 @@ The :mod:`functools` module defines the following functions:
         >>> factorial(12)      # makes two new recursive calls, the other 10 are cached
         479001600
 
-   The cache is threadsafe so the wrapped function can be used in multiple
-   threads.
+   The cache is threadsafe so that the wrapped function can be used in
+   multiple threads.  This means that the underlying data structure will
+   remain coherent during concurrent updates.
+
+   It is possible for the wrapped function to be called more than once if
+   another thread makes an additional call before the initial call has been
+   completed and cached.
 
    .. versionadded:: 3.9
 
@@ -158,8 +163,13 @@ The :mod:`functools` module defines the following functions:
    *maxsize* most recent calls.  It can save time when an expensive or I/O bound
    function is periodically called with the same arguments.
 
-   The cache is threadsafe so the wrapped function can be used in multiple
-   threads.
+   The cache is threadsafe so that the wrapped function can be used in
+   multiple threads.  This means that the underlying data structure will
+   remain coherent during concurrent updates.
+
+   It is possible for the wrapped function to be called more than once if
+   another thread makes an additional call before the initial call has been
+   completed and cached.
 
    Since a dictionary is used to cache results, the positional and keyword
    arguments to the function must be :term:`hashable`.