# HG changeset patch # User Ludovic Chabant # Date 1436665790 25200 # Node ID 04abc97dd3b636e3407bfb7159bc15b8f4a6ee87 # Parent b015e38d4ee11b16ef80b127a551527ceff18365 bake: Add CLI argument to specify job batch size. diff -r b015e38d4ee1 -r 04abc97dd3b6 piecrust/baking/baker.py --- a/piecrust/baking/baker.py Sat Jul 11 17:51:56 2015 -0700 +++ b/piecrust/baking/baker.py Sat Jul 11 18:49:50 2015 -0700 @@ -541,6 +541,7 @@ from piecrust.baking.worker import BakeWorkerContext, BakeWorker worker_count = self.app.config.get('baker/workers') + batch_size = self.app.config.get('baker/batch_size') ctx = BakeWorkerContext( self.app.root_dir, self.app.cache.base_dir, self.out_dir, @@ -548,6 +549,7 @@ force=self.force, debug=self.app.debug) pool = WorkerPool( worker_count=worker_count, + batch_size=batch_size, worker_class=BakeWorker, initargs=(ctx,)) return pool diff -r b015e38d4ee1 -r 04abc97dd3b6 piecrust/commands/builtin/baking.py --- a/piecrust/commands/builtin/baking.py Sat Jul 11 17:51:56 2015 -0700 +++ b/piecrust/commands/builtin/baking.py Sat Jul 11 18:49:50 2015 -0700 @@ -42,6 +42,10 @@ help="The number of worker processes to spawn.", type=int, default=-1) parser.add_argument( + '--batch-size', + help="The number of jobs per batch.", + type=int, default=-1) + parser.add_argument( '--assets-only', help="Only bake the assets (don't bake the web pages).", action='store_true') @@ -90,6 +94,8 @@ def _bakeSources(self, ctx, out_dir): if ctx.args.workers > 0: ctx.app.config.set('baker/workers', ctx.args.workers) + if ctx.args.batch_size > 0: + ctx.app.config.set('baker/batch_size', ctx.args.batch_size) baker = Baker( ctx.app, out_dir, force=ctx.args.force) diff -r b015e38d4ee1 -r 04abc97dd3b6 piecrust/workerpool.py --- a/piecrust/workerpool.py Sat Jul 11 17:51:56 2015 -0700 +++ b/piecrust/workerpool.py Sat Jul 11 18:49:50 2015 -0700 @@ -115,7 +115,8 @@ class WorkerPool(object): - def __init__(self, worker_class, worker_count=None, initargs=(), + def __init__(self, worker_class, initargs=(), + worker_count=None, batch_size=None, wrap_exception=False): worker_count = worker_count or os.cpu_count() or 1 @@ -131,6 +132,7 @@ self._quick_put = self._task_queue._writer.send self._quick_get = self._result_queue._reader.recv + self._batch_size = batch_size self._callback = None self._error_callback = None self._listener = None @@ -189,6 +191,8 @@ self._listener = res if chunk_size is None: + chunk_size = self._batch_size + if chunk_size is None: chunk_size = max(1, job_count // 50) logger.debug("Using chunk size of %d" % chunk_size)