diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-03-30 22:02:45 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-06-16 10:58:25 +0100 |
commit | 07f6c0b464f0671bc39116317138e4ddf27bdae9 (patch) | |
tree | 2e8e7c28d646b5ce76e2867a867ec171552b8e43 /meta/classes | |
parent | dd540fba6c65fb74df014f5d9d2965078314a790 (diff) | |
download | openembedded-core-07f6c0b464f0671bc39116317138e4ddf27bdae9.tar.gz openembedded-core-07f6c0b464f0671bc39116317138e4ddf27bdae9.tar.bz2 openembedded-core-07f6c0b464f0671bc39116317138e4ddf27bdae9.zip |
package_ipk: Parallelise ipk creation
Allow the creation of ipks to happen in parallel, making best use of resources
on multiprocessor systems.
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/package_ipk.bbclass | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/meta/classes/package_ipk.bbclass b/meta/classes/package_ipk.bbclass index 8e69b5da36..d58b824d3a 100644 --- a/meta/classes/package_ipk.bbclass +++ b/meta/classes/package_ipk.bbclass @@ -17,6 +17,8 @@ OPKG_ARGS += "${@['', '--add-exclude ' + ' --add-exclude '.join((d.getVar('PACKA OPKGLIBDIR = "${localstatedir}/lib" python do_package_ipk () { + from multiprocessing import Process + oldcwd = os.getcwd() workdir = d.getVar('WORKDIR') @@ -37,11 +39,25 @@ python do_package_ipk () { if os.access(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN"), os.R_OK): os.unlink(os.path.join(tmpdir, "stamps", "IPK_PACKAGE_INDEX_CLEAN")) - for pkg in packages.split(): - ipk_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=ipk_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_ipk[vardeps] += "ipk_write_pkg" +do_package_ipk[vardepsexclude] = "BB_NUMBER_THREADS" def ipk_write_pkg(pkg, d): import re, copy |