mirror of https://github.com/python/cpython
gh-110666: Fix multiprocessing test_terminate() elapsed (#110667)
multiprocessing test_terminate() and test_wait_socket_slow() no longer test the CI performance: no longer check maximum elapsed time. Add CLOCK_RES constant: tolerate a difference of 100 ms.
This commit is contained in:
parent
f901f56313
commit
1556f426da
|
@ -84,6 +84,11 @@ if support.HAVE_ASAN_FORK_BUG:
|
|||
raise unittest.SkipTest("libasan has a pthread_create() dead lock related to thread+fork")
|
||||
|
||||
|
||||
# gh-110666: Tolerate a difference of 100 ms when comparing timings
|
||||
# (clock resolution)
|
||||
CLOCK_RES = 0.100
|
||||
|
||||
|
||||
def latin(s):
|
||||
return s.encode('latin')
|
||||
|
||||
|
@ -1655,8 +1660,7 @@ class _TestCondition(BaseTestCase):
|
|||
dt = time.monotonic()
|
||||
result = cond.wait_for(lambda : state.value==4, timeout=expected)
|
||||
dt = time.monotonic() - dt
|
||||
# borrow logic in assertTimeout() from test/lock_tests.py
|
||||
if not result and expected * 0.6 <= dt:
|
||||
if not result and (expected - CLOCK_RES) <= dt:
|
||||
success.value = True
|
||||
|
||||
@unittest.skipUnless(HAS_SHAREDCTYPES, 'needs sharedctypes')
|
||||
|
@ -2678,14 +2682,11 @@ class _TestPool(BaseTestCase):
|
|||
p.join()
|
||||
|
||||
def test_terminate(self):
|
||||
result = self.pool.map_async(
|
||||
time.sleep, [0.1 for i in range(10000)], chunksize=1
|
||||
)
|
||||
# Simulate slow tasks which take "forever" to complete
|
||||
args = [support.LONG_TIMEOUT for i in range(10_000)]
|
||||
result = self.pool.map_async(time.sleep, args, chunksize=1)
|
||||
self.pool.terminate()
|
||||
join = TimingWrapper(self.pool.join)
|
||||
join()
|
||||
# Sanity check the pool didn't wait for all tasks to finish
|
||||
self.assertLess(join.elapsed, 2.0)
|
||||
self.pool.join()
|
||||
|
||||
def test_empty_iterable(self):
|
||||
# See Issue 12157
|
||||
|
@ -4908,7 +4909,7 @@ class TestWait(unittest.TestCase):
|
|||
def _child_test_wait(cls, w, slow):
|
||||
for i in range(10):
|
||||
if slow:
|
||||
time.sleep(random.random()*0.1)
|
||||
time.sleep(random.random() * 0.100)
|
||||
w.send((i, os.getpid()))
|
||||
w.close()
|
||||
|
||||
|
@ -4948,7 +4949,7 @@ class TestWait(unittest.TestCase):
|
|||
s.connect(address)
|
||||
for i in range(10):
|
||||
if slow:
|
||||
time.sleep(random.random()*0.1)
|
||||
time.sleep(random.random() * 0.100)
|
||||
s.sendall(('%s\n' % i).encode('ascii'))
|
||||
s.close()
|
||||
|
||||
|
@ -4997,25 +4998,19 @@ class TestWait(unittest.TestCase):
|
|||
def test_wait_timeout(self):
|
||||
from multiprocessing.connection import wait
|
||||
|
||||
expected = 5
|
||||
timeout = 5.0 # seconds
|
||||
a, b = multiprocessing.Pipe()
|
||||
|
||||
start = time.monotonic()
|
||||
res = wait([a, b], expected)
|
||||
res = wait([a, b], timeout)
|
||||
delta = time.monotonic() - start
|
||||
|
||||
self.assertEqual(res, [])
|
||||
self.assertLess(delta, expected * 2)
|
||||
self.assertGreater(delta, expected * 0.5)
|
||||
self.assertGreater(delta, timeout - CLOCK_RES)
|
||||
|
||||
b.send(None)
|
||||
|
||||
start = time.monotonic()
|
||||
res = wait([a, b], 20)
|
||||
delta = time.monotonic() - start
|
||||
|
||||
self.assertEqual(res, [a])
|
||||
self.assertLess(delta, 0.4)
|
||||
|
||||
@classmethod
|
||||
def signal_and_sleep(cls, sem, period):
|
||||
|
|
Loading…
Reference in New Issue