Skip to content

Commit da14c09

Browse files
project.py: paralelize west update
The projects from manifests were updated one by one. The parallel aproach has potential to fully utilize CPU and network connection to speed up the update. Signed-off-by: Robert Gałat <[email protected]>
1 parent cf18ce8 commit da14c09

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
'pykwalify',
4747
'setuptools',
4848
'packaging',
49+
'joblib'
4950
],
5051
python_requires='>=3.8',
5152
entry_points={'console_scripts': ('west = west.app.main:main',)},

src/west/app/project.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
'''West project commands'''
77

88
import argparse
9+
from joblib import Parallel, delayed
910
from functools import partial
1011
import logging
1112
import os
@@ -1018,18 +1019,22 @@ def update_all(self):
10181019
import_flags=ImportFlag.FORCE_PROJECTS)
10191020

10201021
failed = []
1021-
for project in self.manifest.projects:
1022+
1023+
def project_update(project):
10221024
if (isinstance(project, ManifestProject) or
10231025
project.name in self.updated):
1024-
continue
1026+
return
10251027
try:
10261028
if not self.project_is_active(project):
10271029
self.dbg(f'{project.name}: skipping inactive project')
1028-
continue
1029-
self.update(project)
1030+
return
10301031
self.updated.add(project.name)
1032+
self.update(project)
10311033
except subprocess.CalledProcessError:
10321034
failed.append(project)
1035+
1036+
Parallel(n_jobs=-1, require='sharedmem')(delayed(project_update)(project)
1037+
for project in self.manifest.projects)
10331038
self._handle_failed(self.args, failed)
10341039

10351040
def update_importer(self, project, path):
@@ -1090,13 +1095,17 @@ def update_some(self):
10901095
projects = self._projects(self.args.projects)
10911096

10921097
failed = []
1093-
for project in projects:
1098+
1099+
def project_update_some(project):
10941100
if isinstance(project, ManifestProject):
1095-
continue
1101+
return
10961102
try:
10971103
self.update(project)
10981104
except subprocess.CalledProcessError:
10991105
failed.append(project)
1106+
1107+
Parallel(n_jobs=-1, require='sharedmem')(delayed(project_update_some)(project)
1108+
for project in projects)
11001109
self._handle_failed(self.args, failed)
11011110

11021111
def toplevel_projects(self):

0 commit comments

Comments
 (0)