changeset 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 3c6e6e7b9639
children 298b07a899b5
files piecrust/baking/worker.py piecrust/workerpool.py
diffstat 2 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/baking/worker.py	Wed Nov 29 21:35:49 2017 -0800
+++ b/piecrust/baking/worker.py	Wed Nov 29 21:36:11 2017 -0800
@@ -43,8 +43,8 @@
         app.env.fs_cache_only_for_main_page = True
 
         stats = app.env.stats
-        stats.registerTimer("BakeWorker_%d_Total" % self.wid)
-        stats.registerTimer("BakeWorkerInit")
+        stats.registerTimer("Worker_%d_Total" % self.wid)
+        stats.registerTimer("Worker_%d_Init" % self.wid)
 
         self.app = app
         self.stats = stats
@@ -74,7 +74,8 @@
             stats.registerTimer("PipelineJobs_%s" % pname,
                                 raise_if_registered=False)
 
-        stats.stepTimerSince("BakeWorkerInit", self._work_start_time)
+        stats.stepTimerSince(
+            "Worker_%d_Init" % self.wid, self._work_start_time)
 
     def process(self, job):
         source_name, item_spec = job['job_spec']
@@ -98,7 +99,7 @@
 
     def getStats(self):
         stats = self.app.env.stats
-        stats.stepTimerSince("BakeWorker_%d_Total" % self.wid,
+        stats.stepTimerSince("Worker_%d_Total" % self.wid,
                              self._work_start_time)
         return stats
 
--- 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)