Skip to content

Commit

Permalink
gh-102029: Deprecate passing arguments to _PyRLock in threading (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
sobolevn committed Aug 17, 2023
1 parent 0b243c2 commit 80f30cf
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 0 deletions.
6 changes: 6 additions & 0 deletions Doc/whatsnew/3.13.rst
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,12 @@ Pending Removal in Python 3.15
They will be removed in Python 3.15.
(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
------------------------------

Expand Down
24 changes: 24 additions & 0 deletions Lib/test/test_threading.py
Original file line number Diff line number Diff line change
Expand Up @@ -1748,6 +1748,30 @@ class PyRLockTests(lock_tests.RLockTests):
class CRLockTests(lock_tests.RLockTests):
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):
eventtype = staticmethod(threading.Event)

Expand Down
7 changes: 7 additions & 0 deletions Lib/threading.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import sys as _sys
import _thread
import functools
import warnings

from time import monotonic as _time
from _weakrefset import WeakSet
Expand Down Expand Up @@ -116,6 +117,12 @@ def RLock(*args, **kwargs):
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:
return _PyRLock(*args, **kwargs)
return _CRLock(*args, **kwargs)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Deprecate passing any arguments to :func:`threading.RLock`.

0 comments on commit 80f30cf

Please sign in to comment.