мультипроцессирование более двух аргументов в pool.map с использованием частичного из itertools - PullRequest
0 голосов
/ 14 января 2020

Мне нужно передать 5 аргументов в multiprocessing.pool.map. Я могу успешно передать 2, используя itertools.partial, но мне нужно больше, чтобы я мог использовать счетчик, использование счетчика требует блокировки и общего счетчика. Я посмотрел на еще один вопрос по стеку, но он не относится ко мне в текущей ситуации.

Вот мой текущий код с использованием частичного:

import multiprocessing
from multiprocessing import Pool, Value, Lock
from itertools import partial

def check(argumentnumberone, iteratorr):
    #MY CODE HERE


def main():
    pool = Pool(numbofthreadshere)
    pool.daemon = True
    func2 = partial(check, goodones)#this is argumentone
    result = pool.map(func2, arrange)#this is the iterator

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

1 Ответ

1 голос
/ 14 января 2020

Хотите, чтобы вы могли подготовить список аргументов и передать кортеж или список аргументов в карту пула вместо использования частичного:


def check(*args):
    print('check', args)


def main():
    pool = Pool(8)
    pool.daemon = True
    result = pool.map(check, [(1, 2, 3), (4, 5, 6)])

main()

Или вы можете использовать частичное, например, так:

import multiprocessing

from multiprocessing import Pool, Value, Lock
from functools import partial


def check(*args):
    print('check', args)


def main():
    pool = Pool(8)
    pool.daemon = True
    my_func = partial(check, 'arg0 from partial', 'arg1 from partial')
    result = pool.map(my_func, range(10))

main()

Последний фрагмент выведет следующее:

check ('arg0 from partial', 'arg1 from partial', 0)
check ('arg0 from partial', 'arg1 from partial', 1)
check ('arg0 from partial', 'arg1 from partial', 2)
check ('arg0 from partial', 'arg1 from partial', 3)
check ('arg0 from partial', 'arg1 from partial', 4)
check ('arg0 from partial', 'arg1 from partial', 5)
check ('arg0 from partial', 'arg1 from partial', 8)
check ('arg0 from partial', 'arg1 from partial', 6)
check ('arg0 from partial', 'arg1 from partial', 9)
check ('arg0 from partial', 'arg1 from partial', 7)
...