Mercurial > piecrust2
diff piecrust/baking/worker.py @ 455:cb3446be44b7
bake: Abort "render first" jobs if we start using other pages.
This prevents the baker from having one worker stuck on a very long job, like
rendering the index page of a blog with lots and lots of posts.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 08 Jul 2015 22:51:29 -0700 |
parents | 8351a77e13f5 |
children | 456db44dcc53 |
line wrap: on
line diff
--- a/piecrust/baking/worker.py Mon Jul 06 21:32:40 2015 -0700 +++ b/piecrust/baking/worker.py Wed Jul 08 22:51:29 2015 -0700 @@ -3,6 +3,7 @@ from piecrust.app import PieCrust from piecrust.baking.records import BakeRecord, _get_transition_key from piecrust.baking.single import PageBaker, BakingError +from piecrust.environment import AbortedSourceUseError from piecrust.rendering import ( QualifiedPage, PageRenderingContext, render_page_segments) from piecrust.routing import create_route_metadata @@ -147,18 +148,25 @@ route_metadata = create_route_metadata(page) qp = QualifiedPage(page, route, route_metadata) ctx = PageRenderingContext(qp) + self.app.env.abort_source_use = True result = { 'path': fac.path, + 'aborted': False, 'errors': None} logger.debug("Preparing page: %s" % fac.ref_spec) try: render_page_segments(ctx) + except AbortedSourceUseError: + logger.debug("Page %s was aborted." % fac.ref_spec) + result['aborted'] = True except Exception as ex: logger.debug("Got rendering error. Sending it to master.") result['errors'] = _get_errors(ex) if self.ctx.debug: logger.exception(ex) + finally: + self.app.env.abort_source_use = False return result