Передача нескольких переменных в multiprocessing.map () - PullRequest
0 голосов
/ 28 января 2020

У меня есть большой генератор, который даст более 1 триллиона предметов. Мне нужно иметь возможность запускать каждый элемент, полученный в пользовательской функции, при этом передавая некоторые дополнительные параметры.

Ниже приведена структура того, что я пишу, я чувствую, что следующие логики c и код должны работать, однако, похоже, что-то мне не хватает.

Я ожидаю, что после запуска будет напечатано 6 операторов:

"combination: (1,2), letter_1: 'a', letter_2: 'b'"
"combination: (1,3), letter_1: 'a', letter_2: 'b'"
"combination: (2,3), letter_1: 'a', letter_2: 'b'"
"combination: (1,2), letter_1: 'c', letter_2: 'd'"
"combination: (1,3), letter_1: 'c', letter_2: 'd'"
"combination: (2,3), letter_1: 'c', letter_2: 'd'"

и переменная результата равна:

results = [3, 4, 5, 3, 4, 5]

Для чего стоит, функция импортируется из отдельного файла.

import itertools
import multiprocessing

gen = itertools.combinations([1, 2, 3], 2)


def my_fun(combination, letters):
    print(f"combination: {combination}, letter_1: {letters[0]}, letter_2: {letters[1]}")
    return sum([i for i in combination])


for pair in [('a', 'b'), ('c', 'd')]:
    if __name__ == '__main__':
        p = multiprocessing.Pool()
        results = p.map(my_fun, (next(gen), pair))

Пожалуйста, кто-нибудь может указать, где я иду не так, и если это не слишком большая проблема, установите меня в правильном направлении?

Заранее спасибо!

...