Multiprocessing with *args and **kwargs

In case anyone is looking for a very easy way to use multiprocessing with *args and **kwargs, I’ve released a neat wrapper as mplite:

The test is also the showcase:

from mplite import TaskManager, Task
import time

# first create the function that each cpu should work on individually.
def f(*args, **kwargs):
    print(args, kwargs)
    time.sleep(args[0])
    return args[0]

# Next create the main function you'd like to run everything from:
def main():
    tasks = []   # create a tasklist and populate it with tasks
    for n in list(range(10))*5:
        t = Task(f, *(n/10,), **{'hello': n})  
        tasks.append(t)

    with TaskManager() as tm:
        results = tm.execute(tasks)

if __name__ == "__main__":
    main()

output:

  0%|                                                                                                                                           | 0/50 [00:00<?, ?tasks/s](0.0,) {'hello': 0}
(0.1,)(0.2,) {'hello': 2}
 {'hello': 1}
(0.3,) {'hello': 3}      
  2%|██▌                                                                                                                                | 1/50 [00:00<00:09,  5.16tasks/s](0.4,) {'hello': 4}
(0.5,) {'hello': 5}
(0.6,) {'hello': 6}
(0.7,) {'hello': 7}
(0.8,) {'hello': 8}
(0.9,) {'hello': 9}
  4%|█████▏                                                                                                                             | 2/50 [00:00<00:07,  6.83tasks/s](0.0,) {'hello': 0}
(0.1,) {'hello': 1}
  6%|███████▊                                                                                                                           | 3/50 [00:00<00:06,  7.62tasks/s](0.2,) {'hello': 2}
(0.3,) {'hello': 3}
 12%|███████████████▋                                                                                                                   | 6/50 [00:00<00:03, 14.55tasks/s](0.4,) {'hello': 4}
(0.5,) {'hello': 5}
(0.6,) {'hello': 6}
 16%|████████████████████▉                                                                                                              | 8/50 [00:00<00:03, 12.73tasks/s](0.7,) {'hello': 7}
 20%|██████████████████████████                                                                                                        | 10/50 [00:00<00:02, 14.26tasks/s]{'hello': 8}
(0.9,) {'hello': 9}
 24%|███████████████████████████████▏                                                                                                  | 12/50 [00:00<00:02, 15.24tasks/s](0.0,) {'hello': 0}
(0.1,) {'hello': 1}
(0.2,) {'hello': 2}
 30%|███████████████████████████████████████                                                                                           | 15/50 [00:01<00:01, 18.00tasks/s](0.3,) {'hello': 3}
(0.4,) {'hello': 4}
 34%|████████████████████████████████████████████▏                                                                                     | 17/50 [00:01<00:02, 16.15tasks/s] 
{'hello': 5}
(0.6,) {'hello': 6}
(0.7,) {'hello': 7}
 40%|████████████████████████████████████████████████████                                                                              | 20/50 [00:01<00:01, 19.12tasks/s](0.8,) {'hello': 8}
(0.9,) {'hello': 9}
(0.0,) {'hello': 0}
(0.1,) {'hello': 1}
 46%|███████████████████████████████████████████████████████████▊                                                                      | 23/50 [00:01<00:01, 14.43tasks/s]{'hello': 2}
(0.3,) {'hello': 3}
(0.4,) {'hello': 4}
(0.5,) {'hello': 5}
 56%|████████████████████████████████████████████████████████████████████████▊                                                         | 28/50 [00:01<00:01, 16.96tasks/s] 
{'hello': 6}
(0.7,) {'hello': 7}
(0.8,) {'hello': 8}
 62%|████████████████████████████████████████████████████████████████████████████████▌                                                 | 31/50 [00:02<00:01, 17.19tasks/s]
(0.0,) {'hello': 0}
(0.1,) {'hello': 1}
 66%|█████████████████████████████████████████████████████████████████████████████████████▊                                            | 33/50 [00:02<00:01, 16.73tasks/s](0.2,) {'hello': 2}
(0.3,) {'hello': 3}
(0.4,) {'hello': 4}
 74%|████████████████████████████████████████████████████████████████████████████████████████████████▏                                 | 37/50 [00:02<00:00, 17.67tasks/s](0.5,) {'hello': 5}
(0.6,) {'hello': 6}
(0.7,) {'hello': 7}
 80%|████████████████████████████████████████████████████████████████████████████████████████████████████████                          | 40/50 [00:02<00:00, 19.14tasks/s](0.8,) {'hello': 8}
(0.9,) {'hello': 9}
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [00:03<00:00, 14.24tasks/s]