Mercurial > piecrust2
comparison piecrust/baking/baker.py @ 1011:c4cf3cfe2726
bake: Better performance stats, and add callback to preload templates.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 26 Nov 2017 22:23:03 -0800 |
parents | 09dc0240f08a |
children | 071f30aa04bb |
comparison
equal
deleted
inserted
replaced
1010:501bd4ab7e06 | 1011:c4cf3cfe2726 |
---|---|
52 self.app.config.set('baker/is_baking', True) | 52 self.app.config.set('baker/is_baking', True) |
53 self.app.config.set('site/asset_url_format', '%page_uri%/%filename%') | 53 self.app.config.set('site/asset_url_format', '%page_uri%/%filename%') |
54 | 54 |
55 stats = self.app.env.stats | 55 stats = self.app.env.stats |
56 stats.registerTimer('LoadSourceContents', raise_if_registered=False) | 56 stats.registerTimer('LoadSourceContents', raise_if_registered=False) |
57 stats.registerTimer('MasterTaskPut_1', raise_if_registered=False) | 57 stats.registerTimer('CacheTemplates', raise_if_registered=False) |
58 stats.registerTimer('MasterTaskPut_2+', raise_if_registered=False) | |
59 | 58 |
60 # Make sure the output directory exists. | 59 # Make sure the output directory exists. |
61 if not os.path.isdir(self.out_dir): | 60 if not os.path.isdir(self.out_dir): |
62 os.makedirs(self.out_dir, 0o755) | 61 os.makedirs(self.out_dir, 0o755) |
63 | 62 |
96 pool = self._createWorkerPool(records_path, pool_userdata) | 95 pool = self._createWorkerPool(records_path, pool_userdata) |
97 | 96 |
98 # Done with all the setup, let's start the actual work. | 97 # Done with all the setup, let's start the actual work. |
99 logger.info(format_timed(start_time, "setup baker")) | 98 logger.info(format_timed(start_time, "setup baker")) |
100 | 99 |
101 # Load all sources. | 100 # Load all sources, pre-cache templates. |
102 self._loadSources(ppmngr) | 101 self._loadSources(ppmngr) |
102 self._populateTemplateCaches() | |
103 | 103 |
104 # Bake the realms. | 104 # Bake the realms. |
105 self._bakeRealms(pool, ppmngr, record_histories) | 105 self._bakeRealms(pool, ppmngr, record_histories) |
106 | 106 |
107 # Handle deletions, collapse records, etc. | 107 # Handle deletions, collapse records, etc. |
214 if rec_entries is not None: | 214 if rec_entries is not None: |
215 for e in rec_entries: | 215 for e in rec_entries: |
216 rec.addEntry(e) | 216 rec.addEntry(e) |
217 | 217 |
218 stats = self.app.env.stats | 218 stats = self.app.env.stats |
219 stats.stepTimer('LoadSourceContents', | 219 stats.stepTimer('LoadSourceContents', time.perf_counter() - start_time) |
220 time.perf_counter() - start_time) | |
221 logger.info(format_timed(start_time, "loaded site content")) | 220 logger.info(format_timed(start_time, "loaded site content")) |
221 | |
222 def _populateTemplateCaches(self): | |
223 start_time = time.perf_counter() | |
224 | |
225 for eng in self.app.plugin_loader.getTemplateEngines(): | |
226 eng.populateCache() | |
227 | |
228 stats = self.app.env.stats | |
229 stats.stepTimer('CacheTemplates', time.perf_counter() - start_time) | |
230 logger.info(format_timed(start_time, "cache templates")) | |
222 | 231 |
223 def _bakeRealms(self, pool, ppmngr, record_histories): | 232 def _bakeRealms(self, pool, ppmngr, record_histories): |
224 # Bake the realms -- user first, theme second, so that a user item | 233 # Bake the realms -- user first, theme second, so that a user item |
225 # can override a theme item. | 234 # can override a theme item. |
226 # Do this for as many times as we have pipeline passes left to do. | 235 # Do this for as many times as we have pipeline passes left to do. |
270 logger.debug( | 279 logger.debug( |
271 "Queued %d jobs for source '%s' using pipeline '%s' " | 280 "Queued %d jobs for source '%s' using pipeline '%s' " |
272 "(%s, step 0)." % | 281 "(%s, step 0)." % |
273 (new_job_count, src.name, pp.PIPELINE_NAME, realm_name)) | 282 (new_job_count, src.name, pp.PIPELINE_NAME, realm_name)) |
274 | 283 |
275 stats.stepTimer('MasterTaskPut_1', time.perf_counter() - start_time) | |
276 | |
277 if job_count == 0: | 284 if job_count == 0: |
278 logger.debug("No jobs queued! Bailing out of this bake pass.") | 285 logger.debug("No jobs queued! Bailing out of this bake pass.") |
279 return | 286 return |
280 | 287 |
281 pool.wait() | 288 pool.wait() |
312 | 319 |
313 job_count += len(jobs) | 320 job_count += len(jobs) |
314 pool.userdata.next_step_jobs[sn] = [] | 321 pool.userdata.next_step_jobs[sn] = [] |
315 pool.queueJobs(jobs) | 322 pool.queueJobs(jobs) |
316 participating_source_names.append(sn) | 323 participating_source_names.append(sn) |
317 | |
318 stats.stepTimer('MasterTaskPut_2+', time.perf_counter() - start_time) | |
319 | 324 |
320 if job_count == 0: | 325 if job_count == 0: |
321 break | 326 break |
322 | 327 |
323 pool.wait() | 328 pool.wait() |