Order tasksΒΆ

In some settings it can be useful to supply the tasks to workers in a round-robin fashion. This means worker 0 will get task 0, worker 1 will get task 1, etc. After each worker got a task, we start with worker 0 again instead of picking the worker that has most recently completed a task.

When the chunk size is larger than 1, the tasks are distributed to the workers in order, but in chunks. I.e., when chunk_size=3 tasks 0, 1, and 2 will be assigned to worker 0, tasks 3, 4, and 5 to worker 1, and so on.

When keep_alive is set to True and the second map call is made, MPIRE resets the worker order and starts at worker 0 again.

Warning

When tasks vary in execution time, the default task scheduler makes sure each worker is busy for approximately the same amount of time. This can mean that some workers execute more tasks than others. When using order_tasks this is no longer the case and therefore the total execution time is likely to be higher.

You can enable/disable task ordering by setting the order_tasks flag:

def task(x):
    pass

with WorkerPool(n_jobs=4, order_tasks=True) as pool:
    pool.map(task, range(10))

Instead of passing the flag to the mpire.WorkerPool constructor you can also make use of mpire.WorkerPool.set_order_tasks():

with WorkerPool(n_jobs=4) as pool:
    pool.set_order_tasks()
    pool.map(task, range(10))