ProcessPoolExecutor from concurrent.futures way slower than multiprocessing.Pool
When using map from concurrent.futures, each element from the iterable is submitted separately to the executor, which creates a Future object for each call. It then returns an iterator which yields the results returned by the futures. Future objects are rather heavyweight, they do a lot of work to allow all the features they provide …