[lit] Simplify test scheduling via multiprocessing.Pool

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375458 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Julian Lettner
2019-10-21 21:57:18 +00:00
parent e672b94bb1
commit 6556cd04b7

View File

@@ -127,27 +127,20 @@ class ParallelRun(Run):
return True
lit.util.win32api.SetConsoleCtrlHandler(console_ctrl_handler, True)
try:
async_results = [
pool.apply_async(lit.worker.execute, args=[test],
callback=lambda r, t=test: self._process_result(t, r))
for test in self.tests]
pool.close()
async_results = [
pool.apply_async(lit.worker.execute, args=[test],
callback=lambda r, t=test: self._process_result(t, r))
for test in self.tests]
pool.close()
# Wait for all results to come in. The callback that runs in the
# parent process will update the display.
for a in async_results:
timeout = deadline - time.time()
a.wait(timeout)
if not a.successful():
# TODO(yln): this also raises on a --max-time time
a.get() # Exceptions raised here come from the worker.
if self.hit_max_failures:
break
except:
# Stop the workers and wait for any straggling results to come in
# if we exited without waiting on every async result.
pool.terminate()
raise
finally:
pool.join()
for ar in async_results:
timeout = deadline - time.time()
try:
ar.get(timeout)
except multiprocessing.TimeoutError:
# TODO(yln): print timeout error
pool.terminate()
break
if self.hit_max_failures:
pool.terminate()
break