Python передает несколько значений при использовании многопроцессорной обработки и itertools - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь использовать многопроцессорность для вычисления некоторых комбинаций, генерируемых itertools.
Вот простая версия того, что я делаю:

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)

Но возникает ошибка:

NameError: имя 'zs' не определено

Как передать zs в func при использовании itertools.product?

Большое спасибо за любые комментарии.

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете использовать частичную функцию для установки частичных параметров функции, как показано ниже

from functools import partial

def func(comb, zs):
    print(comb, zs)

pfunc = partial(func, zs="abc")

pfunc("123")

# 123 abc
...