Skip to content

Conversation

@lipk
Copy link

@lipk lipk commented Jul 5, 2019

When you have, say, 25 tests and 8 groups, the current work distribution formula will determine the group size at 4 and then the first 6 groups will be assigned 4 tests each, the 7th will get 1 and the 8th will get 0. This is bad first because it's not as uniform as it could be and second because group 8 will throw an exception (at line 21).

I replaced the formula to fix these issues. Now, all groups get to run at least items // groups tests, and the first items % groups groups will receive an extra one. Therefore, the difference between the number of items assigned to any two group will be at most 1. Also, groups with 0 assigned items no longer raise an exception.

@lipk
Copy link
Author

lipk commented Jul 5, 2019

I've just realized that this project has tests and I just broke them. Please ignore the PR until I fix that :)

@lipk
Copy link
Author

lipk commented Jul 5, 2019

Okay, fixed the tests. Found a bug in my code, fixed that too.


return items[start:end]
start, size = get_group_size_and_start(len(items), total_groups, group_id)
return items[start:start+size]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could replace all of this with:

return items[group_id:len(items):group_size]

This is the three-argument slice-operator: [start:end:step].

@bodharma
Copy link

bodharma commented Apr 7, 2020

@wchill how to reach you?
I have the same issue for pytest-split-tests library:
mark-adams#19 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants