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?
CodePudding user response:
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()