Skip to content

Commit 9e1bfd8

Browse files
bpo-47104: Rewrite asyncio.to_thread tests to use IsolatedAsyncioTestCase (pythonGH-32086)
(cherry picked from commit ff619c7) Co-authored-by: Andrew Svetlov <[email protected]>
1 parent 1b6acaa commit 9e1bfd8

File tree

2 files changed

+20
-47
lines changed

2 files changed

+20
-47
lines changed

Lib/test/test_asyncio/test_threads.py

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,87 +5,58 @@
55

66
from contextvars import ContextVar
77
from unittest import mock
8-
from test.test_asyncio import utils as test_utils
98

109

1110
def tearDownModule():
1211
asyncio.set_event_loop_policy(None)
1312

1413

15-
class ToThreadTests(test_utils.TestCase):
16-
def setUp(self):
17-
super().setUp()
18-
self.loop = asyncio.new_event_loop()
19-
asyncio.set_event_loop(self.loop)
20-
21-
def tearDown(self):
22-
self.loop.run_until_complete(
23-
self.loop.shutdown_default_executor())
24-
self.loop.close()
25-
asyncio.set_event_loop(None)
26-
self.loop = None
27-
super().tearDown()
28-
29-
def test_to_thread(self):
30-
async def main():
31-
return await asyncio.to_thread(sum, [40, 2])
32-
33-
result = self.loop.run_until_complete(main())
14+
class ToThreadTests(unittest.IsolatedAsyncioTestCase):
15+
async def test_to_thread(self):
16+
result = await asyncio.to_thread(sum, [40, 2])
3417
self.assertEqual(result, 42)
3518

36-
def test_to_thread_exception(self):
19+
async def test_to_thread_exception(self):
3720
def raise_runtime():
3821
raise RuntimeError("test")
3922

40-
async def main():
41-
await asyncio.to_thread(raise_runtime)
42-
4323
with self.assertRaisesRegex(RuntimeError, "test"):
44-
self.loop.run_until_complete(main())
24+
await asyncio.to_thread(raise_runtime)
4525

46-
def test_to_thread_once(self):
26+
async def test_to_thread_once(self):
4727
func = mock.Mock()
4828

49-
async def main():
50-
await asyncio.to_thread(func)
51-
52-
self.loop.run_until_complete(main())
29+
await asyncio.to_thread(func)
5330
func.assert_called_once()
5431

55-
def test_to_thread_concurrent(self):
32+
async def test_to_thread_concurrent(self):
5633
func = mock.Mock()
5734

58-
async def main():
59-
futs = []
60-
for _ in range(10):
61-
fut = asyncio.to_thread(func)
62-
futs.append(fut)
63-
await asyncio.gather(*futs)
35+
futs = []
36+
for _ in range(10):
37+
fut = asyncio.to_thread(func)
38+
futs.append(fut)
39+
await asyncio.gather(*futs)
6440

65-
self.loop.run_until_complete(main())
6641
self.assertEqual(func.call_count, 10)
6742

68-
def test_to_thread_args_kwargs(self):
43+
async def test_to_thread_args_kwargs(self):
6944
# Unlike run_in_executor(), to_thread() should directly accept kwargs.
7045
func = mock.Mock()
7146

72-
async def main():
73-
await asyncio.to_thread(func, 'test', something=True)
47+
await asyncio.to_thread(func, 'test', something=True)
7448

75-
self.loop.run_until_complete(main())
7649
func.assert_called_once_with('test', something=True)
7750

78-
def test_to_thread_contextvars(self):
51+
async def test_to_thread_contextvars(self):
7952
test_ctx = ContextVar('test_ctx')
8053

8154
def get_ctx():
8255
return test_ctx.get()
8356

84-
async def main():
85-
test_ctx.set('parrot')
86-
return await asyncio.to_thread(get_ctx)
57+
test_ctx.set('parrot')
58+
result = await asyncio.to_thread(get_ctx)
8759

88-
result = self.loop.run_until_complete(main())
8960
self.assertEqual(result, 'parrot')
9061

9162

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Rewrite :func:`asyncio.to_thread` tests to use
2+
:class:`unittest.IsolatedAsyncioTestCase`.

0 commit comments

Comments
 (0)