mirror of
https://github.com/python/cpython.git
synced 2025-10-07 07:31:46 +00:00
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 8e409cebad
.
This commit is contained in:
parent
b62bdf71ea
commit
43ca084c88
3 changed files with 14 additions and 13 deletions
|
@ -129,22 +129,24 @@ class _RandomNameSequence:
|
||||||
|
|
||||||
_RandomNameSequence is an iterator."""
|
_RandomNameSequence is an iterator."""
|
||||||
|
|
||||||
def __init__(self, characters="abcdefghijklmnopqrstuvwxyz0123456789_", length=8, rng=None):
|
characters = "abcdefghijklmnopqrstuvwxyz0123456789_"
|
||||||
if rng is None:
|
|
||||||
rng = _Random()
|
@property
|
||||||
if hasattr(_os, "fork"):
|
def rng(self):
|
||||||
# prevent same state after fork
|
cur_pid = _os.getpid()
|
||||||
_os.register_at_fork(after_in_child=rng.seed)
|
if cur_pid != getattr(self, '_rng_pid', None):
|
||||||
self.rng = rng
|
self._rng = _Random()
|
||||||
self.characters = characters
|
self._rng_pid = cur_pid
|
||||||
self.length = length
|
return self._rng
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
c = self.characters
|
c = self.characters
|
||||||
return ''.join(self.rng.choices(c, k=self.length))
|
choose = self.rng.choice
|
||||||
|
letters = [choose(c) for dummy in range(8)]
|
||||||
|
return ''.join(letters)
|
||||||
|
|
||||||
def _candidate_tempdir_list():
|
def _candidate_tempdir_list():
|
||||||
"""Generate a list of candidate temporary directories which
|
"""Generate a list of candidate temporary directories which
|
||||||
|
|
|
@ -153,8 +153,8 @@ class TestRandomNameSequence(BaseTestCase):
|
||||||
self.r = tempfile._RandomNameSequence()
|
self.r = tempfile._RandomNameSequence()
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
def test_get_eight_char_str(self):
|
def test_get_six_char_str(self):
|
||||||
# _RandomNameSequence returns a eight-character string
|
# _RandomNameSequence returns a six-character string
|
||||||
s = next(self.r)
|
s = next(self.r)
|
||||||
self.nameCheck(s, '', '', '')
|
self.nameCheck(s, '', '', '')
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Replaced pid check in ``tempfile._RandomNameSequence`` with ``os.register_at_fork`` to reduce overhead.
|
|
Loading…
Add table
Add a link
Reference in a new issue