mirror of
https://github.com/python/cpython.git
synced 2025-12-04 08:34:25 +00:00
gh-102029: Deprecate passing arguments to _PyRLock in threading (#102071)
This commit is contained in:
parent
0b243c2f66
commit
80f30cf51b
4 changed files with 38 additions and 0 deletions
|
|
@ -357,6 +357,12 @@ Pending Removal in Python 3.15
|
||||||
They will be removed in Python 3.15.
|
They will be removed in Python 3.15.
|
||||||
(Contributed by Victor Stinner in :gh:`105096`.)
|
(Contributed by Victor Stinner in :gh:`105096`.)
|
||||||
|
|
||||||
|
* Passing any arguments to :func:`threading.RLock` is now deprecated.
|
||||||
|
C version allows any numbers of args and kwargs,
|
||||||
|
but they are just ignored. Python version does not allow any arguments.
|
||||||
|
All arguments will be removed from :func:`threading.RLock` in Python 3.15.
|
||||||
|
(Contributed by Nikita Sobolev in :gh:`102029`.)
|
||||||
|
|
||||||
Pending Removal in Python 3.16
|
Pending Removal in Python 3.16
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1748,6 +1748,30 @@ class PyRLockTests(lock_tests.RLockTests):
|
||||||
class CRLockTests(lock_tests.RLockTests):
|
class CRLockTests(lock_tests.RLockTests):
|
||||||
locktype = staticmethod(threading._CRLock)
|
locktype = staticmethod(threading._CRLock)
|
||||||
|
|
||||||
|
def test_signature(self): # gh-102029
|
||||||
|
with warnings.catch_warnings(record=True) as warnings_log:
|
||||||
|
threading.RLock()
|
||||||
|
self.assertEqual(warnings_log, [])
|
||||||
|
|
||||||
|
arg_types = [
|
||||||
|
((1,), {}),
|
||||||
|
((), {'a': 1}),
|
||||||
|
((1, 2), {'a': 1}),
|
||||||
|
]
|
||||||
|
for args, kwargs in arg_types:
|
||||||
|
with self.subTest(args=args, kwargs=kwargs):
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
threading.RLock(*args, **kwargs)
|
||||||
|
|
||||||
|
# Subtypes with custom `__init__` are allowed (but, not recommended):
|
||||||
|
class CustomRLock(self.locktype):
|
||||||
|
def __init__(self, a, *, b) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
with warnings.catch_warnings(record=True) as warnings_log:
|
||||||
|
CustomRLock(1, b=2)
|
||||||
|
self.assertEqual(warnings_log, [])
|
||||||
|
|
||||||
class EventTests(lock_tests.EventTests):
|
class EventTests(lock_tests.EventTests):
|
||||||
eventtype = staticmethod(threading.Event)
|
eventtype = staticmethod(threading.Event)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import os as _os
|
||||||
import sys as _sys
|
import sys as _sys
|
||||||
import _thread
|
import _thread
|
||||||
import functools
|
import functools
|
||||||
|
import warnings
|
||||||
|
|
||||||
from time import monotonic as _time
|
from time import monotonic as _time
|
||||||
from _weakrefset import WeakSet
|
from _weakrefset import WeakSet
|
||||||
|
|
@ -116,6 +117,12 @@ def RLock(*args, **kwargs):
|
||||||
acquired it.
|
acquired it.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
if args or kwargs:
|
||||||
|
warnings.warn(
|
||||||
|
'Passing arguments to RLock is deprecated and will be removed in 3.15',
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
if _CRLock is None:
|
if _CRLock is None:
|
||||||
return _PyRLock(*args, **kwargs)
|
return _PyRLock(*args, **kwargs)
|
||||||
return _CRLock(*args, **kwargs)
|
return _CRLock(*args, **kwargs)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Deprecate passing any arguments to :func:`threading.RLock`.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue