Threads can't be forced to terminate (without potentially corrupting too much
state), so the expected behaviour of `ThreadPool.terminate` is to wait for
the currently executing tasks to finish.
Use shorter sleep time for threadpools, so if a task manages to start, the test
doesn't block for long.
(cherry picked from commit
c1db9606081bdbe0207f83a861a3c70c356d3704)
Co-authored-by: Petr Viktorin <encukou@gmail.com>
def test_terminate(self):
# Simulate slow tasks which take "forever" to complete
+ sleep_time = support.LONG_TIMEOUT
+
+ if self.TYPE == 'threads':
+ # Thread pool workers can't be forced to quit, so if the first
+ # task starts early enough, we will end up waiting for it.
+ # Sleep for a shorter time, so the test doesn't block.
+ sleep_time = 1
+
p = self.Pool(3)
- args = [support.LONG_TIMEOUT for i in range(10_000)]
+ args = [sleep_time for i in range(10_000)]
result = p.map_async(time.sleep, args, chunksize=1)
p.terminate()
p.join()