лучший способ выполнить список задач с многопроцессорной обработкой с использованием N работников?

#python #multiprocessing

Вопрос:

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

и все это с использованием многопроцессорной обработки

прямо сейчас я застрял с этим кодом:

 from concurrent.futures import ProcessPoolExecutor


def multiprocessing(func, args, workers):
    with ProcessPoolExecutor(workers) as ex:
        res = ex.map(func, args)
    return list(res)


def do_stuff(arg1, arg2):
    '''it has to be executed once and do some tasks'''
    pass


def main():
    data = ...
    args = []
    for i in data:
        args.append((i, 123))
    multiprocessing(do_stuff, args, 5)

main()
 

правильно ли это или должно быть изменено?
самое сложное, что do_stuff должен быть выполнен только 5 раз, не больше, и он должен получать все новые и новые аргументы

Комментарии:

1. Если этот код работает для вас, все в порядке?

2. @AKX, я не уверен, что это лучший способ, и он работает хорошо

3. Если он работает и вы хотите его улучшить, возможно, вам захочется попробовать проверку кода .

4. Ваш код неверен . do_stuff принимает два аргумента, но ex,map(func, args) будет передавать только один аргумент. Кроме того, map уже возвращает список, поэтому ваше утверждение return list(res) является избыточным. Это будет список None значений, так как именно do_stuff это неявно возвращается в настоящее время.

5. @Booboo спасибо, но этот код был просто примером, и я хочу понять, как он будет работать именно так, как я хочу: 5 работников работают в очереди и получают все новые и новые аргументы. Этот запускает 5 работников и передает список из 5 аргументов каждому, затем убивает их всех и делает все снова