changeset 462:04abc97dd3b6

bake: Add CLI argument to specify job batch size.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 11 Jul 2015 18:49:50 -0700
parents b015e38d4ee1
children aefd2714d205
files piecrust/baking/baker.py piecrust/commands/builtin/baking.py piecrust/workerpool.py
diffstat 3 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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)
--- 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)