Thanks for the patch Michal.Task do_configure delivered by npm.bbclass takes a lot of time, the longer shrinkwrap dependency list the longer time needed for do_configure to execute.Following improvement allows to execute do_configure on any available CPI threads.
Can you resend to:
bitbake-devel@lists.openembedded.org
using git send-email as per:
https://www.openembedded.org/wiki/How_to_submit_a_patch_to_OpenEmbedded
Thanks,
../Randy
diff --git a/bitbake/lib/bb/fetch2/npmsw.py b/bitbake/lib/bb/fetch2/npmsw.pyindex 0c3511d8ab..0e6075859c 100644--- a/bitbake/lib/bb/fetch2/npmsw.py+++ b/bitbake/lib/bb/fetch2/npmsw.py@@ -29,8 +29,9 @@ from bb.fetch2.npm import npm_integrityfrom bb.fetch2.npm import npm_localfilefrom bb.fetch2.npm import npm_unpackfrom bb.utils import is_semver+from concurrent.futures import ThreadPoolExecutor-def foreach_dependencies(shrinkwrap, callback=None, dev=False):+def foreach_dependencies(shrinkwrap, callback=None, dev=False, executor=None):"""Run a callback for each dependencies of a shrinkwrap file.The callback is using the format:@@ -49,7 +50,10 @@ def foreach_dependencies(shrinkwrap, callback=None, dev=False):continueelif deps[name].get("bundled", False):continue- callback(name, deps[name], subtree)+ if executor:+ executor.submit(callback, name=name, params=deps[name], deptree=subtree)+ else:+ callback(name, deps[name], subtree)_walk_deps(shrinkwrap.get("dependencies", {}), [])diff --git a/meta/classes/npm.bbclass b/meta/classes/npm.bbclassindex 068032a1e5..1869b63cdb 100644--- a/meta/classes/npm.bbclass+++ b/meta/classes/npm.bbclass@@ -80,6 +80,7 @@ python npm_do_configure() {from bb.fetch2.npm import npm_unpackfrom bb.fetch2.npmsw import foreach_dependenciesfrom bb.progress import OutOfProgressHandler+ from concurrent.futures import ThreadPoolExecutorbb.utils.remove(d.getVar("NPM_CACHE"), recurse=True)bb.utils.remove(d.getVar("NPM_PACKAGE"), recurse=True)@@ -164,9 +165,11 @@ python npm_do_configure() {progress_done += 1progress.write("%d/%d" % (progress_done, progress_total))+ executor = ThreadPoolExecutor(max_workers = os.cpu_count())dev = bb.utils.to_boolean(d.getVar("NPM_INSTALL_DEV"), False)foreach_dependencies(orig_shrinkwrap, _count_dependency, dev)- foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev)+ foreach_dependencies(orig_shrinkwrap, _cache_dependency, dev, executor)+ executor.shutdown(True)# Configure the main packagewith tempfile.TemporaryDirectory() as tmpdir:
-- # Randy MacLeod # Wind River Linux