mirror of
https://github.com/python/cpython.git
synced 2025-08-26 11:45:20 +00:00
bpo-45735: Promise the long-time truth that args=list
works (GH-30982)
For threads, and for multiprocessing, it's always been the case that ``args=list`` works fine when passed to ``Process()`` or ``Thread()``, and such code is common in the wild. But, according to the docs, only a tuple can be used. This brings the docs into synch with reality. Doc changes by Charlie Zhao. Co-authored-by: Tim Peters <tim.peters@gmail.com>
This commit is contained in:
parent
5ab745fc51
commit
e466faa9df
6 changed files with 82 additions and 3 deletions
|
@ -123,6 +123,32 @@ class ThreadTests(BaseTestCase):
|
|||
thread = threading.Thread(target=func)
|
||||
self.assertEqual(thread.name, "Thread-5 (func)")
|
||||
|
||||
def test_args_argument(self):
|
||||
# bpo-45735: Using list or tuple as *args* in constructor could
|
||||
# achieve the same effect.
|
||||
num_list = [1]
|
||||
num_tuple = (1,)
|
||||
|
||||
str_list = ["str"]
|
||||
str_tuple = ("str",)
|
||||
|
||||
list_in_tuple = ([1],)
|
||||
tuple_in_list = [(1,)]
|
||||
|
||||
test_cases = (
|
||||
(num_list, lambda arg: self.assertEqual(arg, 1)),
|
||||
(num_tuple, lambda arg: self.assertEqual(arg, 1)),
|
||||
(str_list, lambda arg: self.assertEqual(arg, "str")),
|
||||
(str_tuple, lambda arg: self.assertEqual(arg, "str")),
|
||||
(list_in_tuple, lambda arg: self.assertEqual(arg, [1])),
|
||||
(tuple_in_list, lambda arg: self.assertEqual(arg, (1,)))
|
||||
)
|
||||
|
||||
for args, target in test_cases:
|
||||
with self.subTest(target=target, args=args):
|
||||
t = threading.Thread(target=target, args=args)
|
||||
t.start()
|
||||
|
||||
@cpython_only
|
||||
def test_disallow_instantiation(self):
|
||||
# Ensure that the type disallows instantiation (bpo-43916)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue