I am using Python multiprocessing, more precisely from multiprocessing import Pool p = Pool(15) args = [(df, config1), (df, config2), ...] #list of args - df is the same object in each tuple res = p.map_async(func, args) #func is some arbitrary function p.close() p.join() This approach has a huge memory consumption; eating up pretty much all my RAM (at which point it gets extremely slow, hence mak