[Python-checkins] [3.11] gh-103059: Clarify gc.freeze documentation (GH-103058) (#103416)
carljm
webhook-mailer at python.org
Mon Apr 10 13:17:55 EDT 2023
https://github.com/python/cpython/commit/b80e4c89d8f385ca77a41e2d6302c95d7e10f391
commit: b80e4c89d8f385ca77a41e2d6302c95d7e10f391
branch: 3.11
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: carljm <carl at oddbird.net>
date: 2023-04-10T11:17:48-06:00
summary:
[3.11] gh-103059: Clarify gc.freeze documentation (GH-103058) (#103416)
gh-103059: Clarify gc.freeze documentation (GH-103058)
(cherry picked from commit 8b1b17134e2241a8cdff9e0c869013a7ff3ca2fe)
Co-authored-by: raylu <lurayl at gmail.com>
files:
M Doc/library/gc.rst
M Misc/ACKS
diff --git a/Doc/library/gc.rst b/Doc/library/gc.rst
index 69a1a8313b75..42bb6dc3503f 100644
--- a/Doc/library/gc.rst
+++ b/Doc/library/gc.rst
@@ -206,12 +206,17 @@ The :mod:`gc` module provides the following functions:
.. function:: freeze()
- Freeze all the objects tracked by gc - move them to a permanent generation
- and ignore all the future collections. This can be used before a POSIX
- fork() call to make the gc copy-on-write friendly or to speed up collection.
- Also collection before a POSIX fork() call may free pages for future
- allocation which can cause copy-on-write too so it's advised to disable gc
- in parent process and freeze before fork and enable gc in child process.
+ Freeze all the objects tracked by the garbage collector; move them to a
+ permanent generation and ignore them in all the future collections.
+
+ If a process will ``fork()`` without ``exec()``, avoiding unnecessary
+ copy-on-write in child processes will maximize memory sharing and reduce
+ overall memory usage. This requires both avoiding creation of freed "holes"
+ in memory pages in the parent process and ensuring that GC collections in
+ child processes won't touch the ``gc_refs`` counter of long-lived objects
+ originating in the parent process. To accomplish both, call ``gc.disable()``
+ early in the parent process, ``gc.freeze()`` right before ``fork()``, and
+ ``gc.enable()`` early in child processes.
.. versionadded:: 3.7
diff --git a/Misc/ACKS b/Misc/ACKS
index dbcff1e15435..c7c0677c5ba1 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1103,6 +1103,7 @@ Jason Lowe
Tony Lownds
Ray Loyzaga
Kang-Hao (Kenny) Lu
+Raymond Lu
Lukas Lueg
Loren Luke
Fredrik Lundh
More information about the Python-checkins
mailing list