Skip to content

Commit 43ca084

Browse files
authored
Revert "bpo-42160: tempfile: Reduce overhead of pid check. (GH-22997)"
`_RandomNameSequence` is not true singleton so using `os.register_at_fork` doesn't make sense unlike `random._inst`. This reverts commit 8e409ce.
1 parent b62bdf7 commit 43ca084

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

Lib/tempfile.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -129,22 +129,24 @@ class _RandomNameSequence:
129129
130130
_RandomNameSequence is an iterator."""
131131

132-
def __init__(self, characters="abcdefghijklmnopqrstuvwxyz0123456789_", length=8, rng=None):
133-
if rng is None:
134-
rng = _Random()
135-
if hasattr(_os, "fork"):
136-
# prevent same state after fork
137-
_os.register_at_fork(after_in_child=rng.seed)
138-
self.rng = rng
139-
self.characters = characters
140-
self.length = length
132+
characters = "abcdefghijklmnopqrstuvwxyz0123456789_"
133+
134+
@property
135+
def rng(self):
136+
cur_pid = _os.getpid()
137+
if cur_pid != getattr(self, '_rng_pid', None):
138+
self._rng = _Random()
139+
self._rng_pid = cur_pid
140+
return self._rng
141141

142142
def __iter__(self):
143143
return self
144144

145145
def __next__(self):
146146
c = self.characters
147-
return ''.join(self.rng.choices(c, k=self.length))
147+
choose = self.rng.choice
148+
letters = [choose(c) for dummy in range(8)]
149+
return ''.join(letters)
148150

149151
def _candidate_tempdir_list():
150152
"""Generate a list of candidate temporary directories which

Lib/test/test_tempfile.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,8 @@ def setUp(self):
153153
self.r = tempfile._RandomNameSequence()
154154
super().setUp()
155155

156-
def test_get_eight_char_str(self):
157-
# _RandomNameSequence returns a eight-character string
156+
def test_get_six_char_str(self):
157+
# _RandomNameSequence returns a six-character string
158158
s = next(self.r)
159159
self.nameCheck(s, '', '', '')
160160

Misc/NEWS.d/next/Library/2020-10-27-00-42-09.bpo-42160.eiLOCi.rst

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)