mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +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
|
@ -247,6 +247,30 @@ class _TestProcess(BaseTestCase):
|
|||
self.assertEqual(current.ident, os.getpid())
|
||||
self.assertEqual(current.exitcode, None)
|
||||
|
||||
def test_args_argument(self):
|
||||
# bpo-45735: Using list or tuple as *args* in constructor could
|
||||
# achieve the same effect.
|
||||
args_cases = (1, "str", [1], (1,))
|
||||
args_types = (list, tuple)
|
||||
|
||||
test_cases = itertools.product(args_cases, args_types)
|
||||
|
||||
for args, args_type in test_cases:
|
||||
with self.subTest(args=args, args_type=args_type):
|
||||
q = self.Queue(1)
|
||||
# pass a tuple or list as args
|
||||
p = self.Process(target=self._test_args, args=args_type((q, args)))
|
||||
p.daemon = True
|
||||
p.start()
|
||||
child_args = q.get()
|
||||
self.assertEqual(child_args, args)
|
||||
p.join()
|
||||
close_queue(q)
|
||||
|
||||
@classmethod
|
||||
def _test_args(cls, q, arg):
|
||||
q.put(arg)
|
||||
|
||||
def test_daemon_argument(self):
|
||||
if self.TYPE == "threads":
|
||||
self.skipTest('test not appropriate for {}'.format(self.TYPE))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue