Skip to content

Commit

Permalink
project.py: use asyncio to paralelize west update
Browse files Browse the repository at this point in the history
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 <robert.galat@nordicsemi.no>
  • Loading branch information
RobertGalatNordic committed Jun 11, 2024
1 parent cf18ce8 commit 3fa370f
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/west/app/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
'''West project commands'''

import argparse
import asyncio
from functools import partial
import logging
import os
Expand Down Expand Up @@ -1018,18 +1019,23 @@ def update_all(self):
import_flags=ImportFlag.FORCE_PROJECTS)

failed = []
for project in self.manifest.projects:

def project_update(project):
if (isinstance(project, ManifestProject) or
project.name in self.updated):
continue
return
try:
if not self.project_is_active(project):
self.dbg(f'{project.name}: skipping inactive project')
continue
return
self.update(project)
self.updated.add(project.name)
except subprocess.CalledProcessError:
failed.append(project)

loop = asyncio.get_event_loop()
looper = asyncio.gather(*[project_update(project) for project in self.manifest.projects])
loop.run_until_complete(looper)
self._handle_failed(self.args, failed)

def update_importer(self, project, path):
Expand Down Expand Up @@ -1090,13 +1096,17 @@ def update_some(self):
projects = self._projects(self.args.projects)

failed = []
for project in projects:
def project_update_some(project):
if isinstance(project, ManifestProject):
continue
return
try:
self.update(project)
except subprocess.CalledProcessError:
failed.append(project)

loop = asyncio.get_event_loop()
looper = asyncio.gather(*[project_update_some(project) for project in projects])
loop.run_until_complete(looper)
self._handle_failed(self.args, failed)

def toplevel_projects(self):
Expand Down

0 comments on commit 3fa370f

Please sign in to comment.