Skip to content

Commit

Permalink
perf(scheduler): sort scopes by number of tests to start with biggest…
Browse files Browse the repository at this point in the history
… scope first
  • Loading branch information
Jörg Kohlsdorf committed Feb 24, 2021
1 parent 1189ae4 commit b131e41
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 1 deletion.
1 change: 1 addition & 0 deletions changelog/632.feature.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
LoadScope scheduler: Sort scopes by number of tests to assign biggest scopes first.
9 changes: 8 additions & 1 deletion src/xdist/scheduler/loadscope.py
Original file line number Diff line number Diff line change
Expand Up @@ -349,11 +349,18 @@ def schedule(self):
return

# Determine chunks of work (scopes)
unsorted_workqueue = OrderedDict()
for nodeid in self.collection:
scope = self._split_scope(nodeid)
work_unit = self.workqueue.setdefault(scope, default=OrderedDict())
work_unit = unsorted_workqueue.setdefault(scope, default=OrderedDict())
work_unit[nodeid] = False

# Insert tests scopes into work queue ordered by number of tests
for scope, nodeids in sorted(
unsorted_workqueue.items(), key=lambda item: -len(item[1])
):
self.workqueue[scope] = nodeids

# Avoid having more workers than work
extra_nodes = len(self.nodes) - len(self.workqueue)

Expand Down

0 comments on commit b131e41

Please sign in to comment.