Source code for hexrd.utils.concurrent

import os


[docs]def distribute_tasks(num_tasks, max_workers=os.cpu_count()): # Distribute tasks as evenly as possible to each worker. # Returns a list of tuples, where each tuple in the list # represents the [start, stop) task range for a worker. result = [] num_assigned = 0 tasks_per_worker = num_tasks // max_workers remainder = num_tasks % max_workers for i in range(max_workers): if num_assigned == num_tasks: break tasks = tasks_per_worker if remainder != 0: tasks += 1 remainder -= 1 if i == 0: previous = 0 else: previous = result[-1][1] result.append((previous, previous + tasks)) num_assigned += tasks return result