#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 аргументов каждому, затем убивает их всех и делает все снова