comparison piecrust/processing/pipeline.py @ 687:61d606fbc313

bake: Change `show-timers` to `show-stats`, add stats.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 14 Mar 2016 08:26:14 -0700
parents 81d9c3a3a0b5
children 9a92e2804562
comparison
equal deleted inserted replaced
686:1a6c4c2683fd 687:61d606fbc313
4 import time 4 import time
5 import hashlib 5 import hashlib
6 import logging 6 import logging
7 import multiprocessing 7 import multiprocessing
8 from piecrust.chefutil import format_timed, format_timed_scope 8 from piecrust.chefutil import format_timed, format_timed_scope
9 from piecrust.environment import ExecutionStats
9 from piecrust.processing.base import PipelineContext 10 from piecrust.processing.base import PipelineContext
10 from piecrust.processing.records import ( 11 from piecrust.processing.records import (
11 ProcessorPipelineRecordEntry, TransitionalProcessorPipelineRecord, 12 ProcessorPipelineRecordEntry, TransitionalProcessorPipelineRecord,
12 FLAG_PROCESSED) 13 FLAG_PROCESSED)
13 from piecrust.processing.worker import ( 14 from piecrust.processing.worker import (
52 'workers', multiprocessing.cpu_count()) 53 'workers', multiprocessing.cpu_count())
53 54
54 ignores = baker_params.get('ignore', []) 55 ignores = baker_params.get('ignore', [])
55 ignores += [ 56 ignores += [
56 '_cache', '_counter', 57 '_cache', '_counter',
57 'theme_info.yml',
58 '.DS_Store', 'Thumbs.db', 58 '.DS_Store', 'Thumbs.db',
59 '.git*', '.hg*', '.svn'] 59 '.git*', '.hg*', '.svn']
60 self.ignore_patterns = make_re(ignores) 60 self.ignore_patterns = make_re(ignores)
61 self.force_patterns = make_re(baker_params.get('force', [])) 61 self.force_patterns = make_re(baker_params.get('force', []))
62 62
146 ar = pool.queueJobs(jobs, handler=_handler) 146 ar = pool.queueJobs(jobs, handler=_handler)
147 ar.wait() 147 ar.wait()
148 148
149 # Shutdown the workers and get timing information from them. 149 # Shutdown the workers and get timing information from them.
150 reports = pool.close() 150 reports = pool.close()
151 record.current.timers = {} 151 total_stats = ExecutionStats()
152 record.current.stats['_Total'] = total_stats
152 for i in range(len(reports)): 153 for i in range(len(reports)):
153 timers = reports[i] 154 worker_stats = reports[i]['data']
154 if timers is None: 155 if worker_stats is not None:
155 continue 156 worker_name = 'PipelineWorker_%d' % i
156 157 record.current.stats[worker_name] = worker_stats
157 worker_name = 'PipelineWorker_%d' % i 158 total_stats.mergeStats(worker_stats)
158 record.current.timers[worker_name] = {}
159 for name, val in timers['data'].items():
160 main_val = record.current.timers.setdefault(name, 0)
161 record.current.timers[name] = main_val + val
162 record.current.timers[worker_name][name] = val
163 159
164 # Invoke post-processors. 160 # Invoke post-processors.
165 pipeline_ctx.record = record.current 161 pipeline_ctx.record = record.current
166 for proc in processors: 162 for proc in processors:
167 proc.onPipelineEnd(pipeline_ctx) 163 proc.onPipelineEnd(pipeline_ctx)