diff piecrust/workerpool.py @ 1019:bd544b65cfad

bake: More detailed stats, and fix a problem with some error reporting.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 29 Nov 2017 21:36:11 -0800
parents 071f30aa04bb
children aa4f1e04cf3e
line wrap: on
line diff
--- a/piecrust/workerpool.py	Wed Nov 29 21:35:49 2017 -0800
+++ b/piecrust/workerpool.py	Wed Nov 29 21:36:11 2017 -0800
@@ -158,13 +158,17 @@
     completed = 0
     time_in_get = 0
     time_in_put = 0
+    is_first_get = True
     get = params.inqueue.get
     put = params.outqueue.put
 
     while True:
         get_start_time = time.perf_counter()
         task = get()
-        time_in_get += (time.perf_counter() - get_start_time)
+        if not is_first_get:
+            time_in_get += (time.perf_counter() - get_start_time)
+        else:
+            is_first_get = False
 
         task_type, task_data = task
 
@@ -185,8 +189,7 @@
                     logger.debug(
                         "Error processing job, sending exception to main process:")
                     logger.debug(traceback.format_exc())
-                    we = _get_worker_exception_data(wid)
-                    error_res = (td, we, False)
+                    error_res = _get_worker_exception_data(wid)
                     result_list.append((td, error_res, False))
 
             res = (task_type, wid, result_list)
@@ -199,8 +202,10 @@
         # End task... gather stats to send back to the main process.
         elif task_type == TASK_END:
             logger.debug("Worker %d got end task, exiting." % wid)
-            stats.registerTimer('WorkerTaskGet', time=time_in_get)
-            stats.registerTimer('WorkerResultPut', time=time_in_put)
+            stats.registerTimer('Worker_%d_TaskGet' % wid, time=time_in_get)
+            stats.registerTimer('Worker_all_TaskGet', time=time_in_get)
+            stats.registerTimer('Worker_%d_ResultPut' % wid, time=time_in_put)
+            stats.registerTimer('Worker_all_ResultPut', time=time_in_put)
             try:
                 stats.mergeStats(w.getStats())
                 stats_data = stats.toData()
@@ -490,7 +495,7 @@
                 self._event.set()
 
     def _handleError(self, job, res, _):
-        logger.error("Worker %d failed to send its report." % res.wid)
+        logger.error("Worker %d failed to send its report." % res[0])
         logger.error(res)