Allow the creation of debs to happen in parallel, making best use of resources on multiprocessor systems.
Signed-off-by: Richard Purdie <richard.pur...@linuxfoundation.org> --- meta/classes/package_deb.bbclass | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/meta/classes/package_deb.bbclass b/meta/classes/package_deb.bbclass index 04b9197..9cab80b 100644 --- a/meta/classes/package_deb.bbclass +++ b/meta/classes/package_deb.bbclass @@ -51,6 +51,8 @@ def debian_arch_map(arch, tune): # INSTALL_TASK_DEB - task name python do_package_deb () { + from multiprocessing import Process + oldcwd = os.getcwd() packages = d.getVar('PACKAGES') @@ -62,11 +64,24 @@ python do_package_deb () { if os.access(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN"),os.R_OK): os.unlink(os.path.join(tmpdir, "stamps", "DEB_PACKAGE_INDEX_CLEAN")) - for pkg in packages.split(): - deb_write_pkg(pkg, d) + max_process = int(d.getVar("BB_NUMBER_THREADS") or os.cpu_count() or 1) + launched = [] + pkgs = packages.split() + while pkgs: + if len(launched) < max_process: + p = Process(target=deb_write_pkg, args=(pkgs.pop(), d)) + p.start() + launched.append(p) + for q in launched: + # The finished processes are joined when calling is_alive() + if not q.is_alive(): + launched.remove(q) + for p in launched: + p.join() os.chdir(oldcwd) } +do_package_deb[vardepsexclude] = "BB_NUMBER_THREADS" def deb_write_pkg(pkg, d): import re, copy -- 2.7.4 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core