I need to pass some arguments to the starmap_async
function. I have a list my_list
that has different values in it and some constants that are repeated. I have a way to pass the arguments as bellow:
import multiprocessing as mp from itertools import repeat def f(a,b,c,d): return (a,b,c,d) my_list = [1,2,3,4,5] with mp.Pool(cpu_num) as pool: res = pool.starmap_async(f, zip(my_list, repeat(a),repeat(b),repeat(c),repeat(d))) pool.close() pool.join() res.get()
It works and generates arguments like this which is the desired output:
(1,a,b,c,d) (2,a,b,c,d) (3,a,b,c,d) (4,a,b,c,d) (5,a,b,c,d)
Now I want to use the map
function to do something like this:
res = pool.starmap_async(f, zip(my_list, repeat(list(map(repeat, [a, b, c, d])))))
but then I end up with arguments like this:
(1,(a,b,c,d)) (2,(a,b,c,d)) (3,(a,b,c,d)) (4,(a,b,c,d)) (5,(a,b,c,d))
How can I fix that issue?
Advertisement
Answer
Try this:
import multiprocessing as mp from itertools import repeat def f(a,b,c,d): return (a,b,c,d) my_list = [1,2,3,4,5] with mp.Pool(cpu_num) as pool: res = pool.starmap_async(f, zip(my_list, *map(repeat, (a,b,c,d)))) pool.close() pool.join() res.get()