Valuex
Valuex

Reputation: 126

Python pass multiple values while using multiprocessing and itertools

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

Answers (1)

Dev Khadka
Dev Khadka

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

Related Questions