Reputation: 126
I am trying to use multiprocessing to do some calculation on the combinations gernerated by itertools.
Here is a simple version of what I am doing:
import multiprocessing
import itertools
def func(comb):
x=list(comb)[0]
y=zs[x]
return x+y
if __name__ == '__main__':
cores=multiprocessing.cpu_count()
pool=multiprocessing.Pool(processes=cores)
xs=range(50)
ys=range(50)
zs=[iy+1 for iy in ys]
for r in pool.imap(func,itertools.product(xs,ys)):
print(r)
But it raises an error:
NameError: name 'zs' is not defined
How to pass zs
to func
while using itertools.product
?
Thanks a lot for any comments.
Upvotes: 0
Views: 113
Reputation: 5451
you can use partial function to set partial parameters of a function like below
from functools import partial
def func(comb, zs):
print(comb, zs)
pfunc = partial(func, zs="abc")
pfunc("123")
# 123 abc
Upvotes: 2