Skip to content

Commit 791dffa

Browse files
committed
Add --jobs to allow for some parallelism.
From 45mn to 5mn for a full build on my machine with -j 16.
1 parent 00ea79c commit 791dffa

File tree

1 file changed

+27
-15
lines changed

1 file changed

+27
-15
lines changed

build_docs.py

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
3232
"""
3333

34+
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
3435
import logging
3536
import os
3637
import subprocess
@@ -176,9 +177,8 @@ def build_one(version, git_branch, isdev, quick, venv, build_root, www_root,
176177
log_directory='/var/log/docsbuild/', language=None):
177178
if not language:
178179
language = 'en'
179-
checkout = os.path.join(build_root, 'python{version}{lang}'.format(
180-
version=str(version).replace('.', ''),
181-
lang=language if language != 'en' else ''))
180+
checkout = os.path.join(
181+
build_root, str(version), 'cpython-{lang}'.format(lang=language))
182182
logging.info("Build start for version: %s, language: %s",
183183
str(version), language)
184184
sphinxopts = SPHINXOPTS[language].copy()
@@ -196,7 +196,7 @@ def build_one(version, git_branch, isdev, quick, venv, build_root, www_root,
196196
os.chmod(language_dir, 0o775)
197197
target = os.path.join(language_dir, str(version))
198198
gettext_language_tag = pep_545_tag_to_gettext_tag(language)
199-
locale_dirs = os.path.join(build_root, 'locale')
199+
locale_dirs = os.path.join(build_root, str(version), 'locale')
200200
locale_clone_dir = os.path.join(
201201
locale_dirs, gettext_language_tag, 'LC_MESSAGES')
202202
locale_repo = 'https://github.com/python/python-docs-{}.git'.format(
@@ -227,8 +227,8 @@ def build_one(version, git_branch, isdev, quick, venv, build_root, www_root,
227227
sphinxbuild = os.path.join(venv, "bin/sphinx-build")
228228
blurb = os.path.join(venv, "bin/blurb")
229229
shell_out(
230-
"cd Doc; make PYTHON=%s SPHINXBUILD=%s BLURB=%s VENVDIR=%s SPHINXOPTS='%s' %s >> %s 2>&1" %
231-
(python, sphinxbuild, blurb, venv, ' '.join(sphinxopts), maketarget,
230+
"make -C %s PYTHON=%s SPHINXBUILD=%s BLURB=%s VENVDIR=%s SPHINXOPTS='%s' %s >> %s 2>&1" %
231+
(os.path.join(checkout, 'Doc'), python, sphinxbuild, blurb, venv, ' '.join(sphinxopts), maketarget,
232232
os.path.join(log_directory, logname)), shell=True)
233233
shell_out(['chgrp', '-R', group, log_directory])
234234
changed = changed_files(os.path.join(checkout, "Doc/build/html"), target)
@@ -319,6 +319,12 @@ def parse_args():
319319
help="Language translation, as a PEP 545 language tag like"
320320
" 'fr' or 'pt-br'.",
321321
metavar='fr')
322+
parser.add_argument(
323+
"--jobs", "-j",
324+
type=int,
325+
default=4,
326+
help="Specifies the number of jobs (languages, versions) "
327+
"to run simultaneously.")
322328
return parser.parse_args()
323329

324330

@@ -348,15 +354,21 @@ def main():
348354
# instead of none. "--languages en" builds *no* translation,
349355
# as "en" is the untranslated one.
350356
args.languages = LANGUAGES
351-
for version, git_branch, devel in branches_to_do:
352-
for language in args.languages:
353-
try:
354-
build_one(version, git_branch, devel, args.quick, venv,
355-
args.build_root, args.www_root,
356-
args.skip_cache_invalidation, args.group,
357-
args.log_directory, language)
358-
except Exception:
359-
logging.exception("docs build raised exception")
357+
with ThreadPoolExecutor(max_workers=args.jobs) as executor:
358+
futures = []
359+
for version, git_branch, devel in branches_to_do:
360+
for language in args.languages:
361+
futures.append((version, language, executor.submit(
362+
build_one, version, git_branch, devel, args.quick, venv,
363+
args.build_root, args.www_root,
364+
args.skip_cache_invalidation, args.group,
365+
args.log_directory, language)))
366+
wait([future[2] for future in futures], return_when=ALL_COMPLETED)
367+
for version, language, future in futures:
368+
if future.exception():
369+
logging.error("Exception while building %s version %s: %s",
370+
language, version,
371+
future.exception())
360372

361373

362374
if __name__ == '__main__':

0 commit comments

Comments
 (0)