[Python] Multiprocessing task with tqdm
We can use tqdm and multiprocessing together by utilizing imap.
import multiprocessing as mp
from tqdm import tqdm
def parallel_work(args):
my_arg_a= args['my_arg_a']
my_arg_b= args['my_arg_b']
result = do_things(my_arg_a, my_arg_b)
return result
if __name__ == '__main__':
# Build a list with objects containing desired arguments
parallel_work_args = [{'my_arg_a': 'a', 'my_arg_b': 'b'}, ...]
# If you encounter deadlock issue, try using the 'spawn' method for children forking
# with mp.get_context("spawn").Pool(mp.cpu_count()) as pool:
with mp.Pool(mp.cpu_count()) as pool:
# Parallel work each arg object
# list() and total are required
results = list(tqdm(pool.imap(parallel_work, parallel_work_args), total=len(parallel_work_args)))