[Piglit] [PATCH v2] framework/profile.py: raise exception from pool.

baker.dylan.c at gmail.com baker.dylan.c at gmail.com
Mon Dec 7 12:25:07 PST 2015


From: Dylan Baker <baker.dylan.c at gmail.com>

By using Multiprocessing.dummy.Pool.apply_async() instead of .imap(), an
exception in the thread can be raised stopping the run of the suite.

v2: - Actually run in parallel.

Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>

There is not a noticeable change in performance, and there is no change
in results with this change.
---
 framework/profile.py | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/framework/profile.py b/framework/profile.py
index 32ed759..8643af6 100644
--- a/framework/profile.py
+++ b/framework/profile.py
@@ -248,22 +248,33 @@ class TestProfile(object):
 
         self._pre_run_hook()
 
-        chunksize = 1
-
         self._prepare_test_list()
         log = LogManager(logger, len(self.test_list))
 
-        def test(pair):
+        def test(name, test):
             """Function to call test.execute from map"""
-            name, test = pair
             with backend.write_test(name) as w:
                 test.execute(name, log.get(), self.dmesg)
                 w(test.result)
 
         def run_threads(pool, testlist):
-            """ Open a pool, close it, and join it """
-            pool.imap(test, testlist, chunksize)
+            """Run all of the tests, and look for exceptions.
+
+            This creates a list of results, and then checks them. the only
+            reason to check each result is that if there is an exception then
+            it will be raised in the main thread rather than in the worker
+            threads.
+
+            """
+            results = []
+            for pair in testlist:
+                results.append(pool.apply_async(test, pair))
+
             pool.close()
+
+            for r in results:
+                r.get()
+
             pool.join()
 
         # Multiprocessing.dummy is a wrapper around Threading that provides a
-- 
2.6.3



More information about the Piglit mailing list