Skip to content

Commit 0ed9a0f

Browse files
committed
Add tests for buffersize combinations with other kwargs
1 parent db7a8a5 commit 0ed9a0f

File tree

1 file changed

+62
-17
lines changed

1 file changed

+62
-17
lines changed

Lib/test/_test_multiprocessing.py

Lines changed: 62 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2916,21 +2916,45 @@ def test_async_timeout(self):
29162916
p.join()
29172917

29182918
def test_imap(self):
2919-
it = self.pool.imap(sqr, list(range(10)))
2920-
self.assertEqual(list(it), list(map(sqr, list(range(10)))))
2921-
2922-
it = self.pool.imap(sqr, list(range(10)))
2923-
for i in range(10):
2924-
self.assertEqual(next(it), i*i)
2925-
self.assertRaises(StopIteration, it.__next__)
2919+
optimal_buffersize = 4 # `self.pool` size
2920+
buffersize_variants = [
2921+
{"buffersize": None},
2922+
{"buffersize": 1},
2923+
{"buffersize": optimal_buffersize},
2924+
{"buffersize": optimal_buffersize * 2},
2925+
]
29262926

2927-
it = self.pool.imap(sqr, list(range(1000)), chunksize=100)
2928-
for i in range(1000):
2929-
self.assertEqual(next(it), i*i)
2930-
self.assertRaises(StopIteration, it.__next__)
2927+
for kwargs in ({}, *buffersize_variants):
2928+
with self.subTest(**kwargs):
2929+
iterable = range(10)
2930+
if self.TYPE != "threads":
2931+
iterable = list(iterable)
2932+
it = self.pool.imap(sqr, iterable, **kwargs)
2933+
self.assertEqual(list(it), list(map(sqr, list(range(10)))))
2934+
2935+
iterable = range(10)
2936+
if self.TYPE != "threads":
2937+
iterable = list(iterable)
2938+
it = self.pool.imap(sqr, iterable, **kwargs)
2939+
for i in range(10):
2940+
self.assertEqual(next(it), i * i)
2941+
self.assertRaises(StopIteration, it.__next__)
2942+
2943+
for kwargs in (
2944+
{"chunksize": 100},
2945+
{"chunksize": 100, "buffersize": optimal_buffersize},
2946+
):
2947+
with self.subTest(**kwargs):
2948+
iterable = range(1000)
2949+
if self.TYPE != "threads":
2950+
iterable = list(iterable)
2951+
it = self.pool.imap(sqr, iterable, **kwargs)
2952+
for i in range(1000):
2953+
self.assertEqual(next(it), i * i)
2954+
self.assertRaises(StopIteration, it.__next__)
29312955

29322956
def test_imap_fast_iterable_with_slow_task(self):
2933-
if self.TYPE in ("processes", "manager"):
2957+
if self.TYPE != "threads":
29342958
self.skipTest("test not appropriate for {}".format(self.TYPE))
29352959

29362960
processes = 4
@@ -2957,7 +2981,7 @@ def produce_args():
29572981
p.join()
29582982

29592983
def test_imap_fast_iterable_with_slow_task_and_buffersize(self):
2960-
if self.TYPE in ("processes", "manager"):
2984+
if self.TYPE != "threads":
29612985
self.skipTest("test not appropriate for {}".format(self.TYPE))
29622986

29632987
processes = 4
@@ -3014,11 +3038,32 @@ def test_imap_handle_iterable_exception(self):
30143038
self.assertRaises(SayWhenError, it.__next__)
30153039

30163040
def test_imap_unordered(self):
3017-
it = self.pool.imap_unordered(sqr, list(range(10)))
3018-
self.assertEqual(sorted(it), list(map(sqr, list(range(10)))))
3041+
optimal_buffersize = 4 # `self.pool` size
3042+
buffersize_variants = [
3043+
{"buffersize": None},
3044+
{"buffersize": 1},
3045+
{"buffersize": optimal_buffersize},
3046+
{"buffersize": optimal_buffersize * 2},
3047+
]
30193048

3020-
it = self.pool.imap_unordered(sqr, list(range(1000)), chunksize=100)
3021-
self.assertEqual(sorted(it), list(map(sqr, list(range(1000)))))
3049+
for kwargs in ({}, *buffersize_variants):
3050+
with self.subTest(**kwargs):
3051+
iterable = range(10)
3052+
if self.TYPE != "threads":
3053+
iterable = list(iterable)
3054+
it = self.pool.imap_unordered(sqr, iterable, **kwargs)
3055+
self.assertEqual(sorted(it), list(map(sqr, list(range(10)))))
3056+
3057+
for kwargs in (
3058+
{"chunksize": 100},
3059+
{"chunksize": 100, "buffersize": optimal_buffersize},
3060+
):
3061+
with self.subTest(**kwargs):
3062+
iterable = range(1000)
3063+
if self.TYPE != "threads":
3064+
iterable = list(iterable)
3065+
it = self.pool.imap_unordered(sqr, iterable, **kwargs)
3066+
self.assertEqual(sorted(it), list(map(sqr, list(range(1000)))))
30223067

30233068
def test_imap_unordered_handle_iterable_exception(self):
30243069
if self.TYPE == 'manager':

0 commit comments

Comments
 (0)