Skip to content

Commit 6c1fb2e

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 6c1fb2e

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
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: 11 additions & 5 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,21 @@ 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
1030+
return
10291031
self.update(project)
10301032
self.updated.add(project.name)
10311033
except subprocess.CalledProcessError:
10321034
failed.append(project)
1035+
1036+
Parallel(n_jobs=-1)(delayed(project_update)(project) for project in self.manifest.projects)
10331037
self._handle_failed(self.args, failed)
10341038

10351039
def update_importer(self, project, path):
@@ -1090,13 +1094,15 @@ def update_some(self):
10901094
projects = self._projects(self.args.projects)
10911095

10921096
failed = []
1093-
for project in projects:
1097+
def project_update_some(project):
10941098
if isinstance(project, ManifestProject):
1095-
continue
1099+
return
10961100
try:
10971101
self.update(project)
10981102
except subprocess.CalledProcessError:
10991103
failed.append(project)
1104+
1105+
Parallel(n_jobs=-1)(delayed(project_update_some)(project) for project in self.manifest.projects)
11001106
self._handle_failed(self.args, failed)
11011107

11021108
def toplevel_projects(self):

0 commit comments

Comments
 (0)