У меня есть словарь словарей, через которые я перебираю. В настоящее время я запускаю его последовательно, обрабатывая по 1 элементу в списке за раз, и это прекрасно работает, но я бы хотел ускорить их обработку с помощью многопроцессорной библиотеки.
Существует много информации о Process / Threads / Pools, но я не уверен, как бы я поступил в этом направлении.
Мне бы хотелось иметь возможность указывать, например, максимум 5 потоков / процессов одновременно, но я не уверен, как работает итерация (т. Е. Сначала я перебираю «задачи», или я перебираю количество потоки / процессы?
например. У меня есть один словарь, содержащий 2 уровня иерархии:
dict = {'router1': {'id': 1, 'name': 'rtr1_core'}, 'router2': {'id': 2, 'name': 'rt2_core'}, 'router3': {'id': 3, 'name': 'rtr3_access'}}
(Обратите внимание, я упростил список элементов в каждом из маршрутизаторов - реально в каждом из них есть более 20 ключей, но я использую id и name, чтобы упростить его.)
Итак, я выполняю итерацию через router1 ... router 3 и каждый словарь '{' id ': 1,' name ':' rtr1_core '}' необходимо передать в функцию 'process_routers', содержащую один аргумент (dict ).
Мне не нужно делиться информацией между процессами.
Мне удалось получить:
# Process the data
p = multiprocessing.Process(target=process_rtr, args=(rtr_data,))
p.start()
p.join()
Что, кажется, все еще запускает его в последовательном режиме - как я могу запустить их параллельно в до x потоков?
На самом деле я рассчитываю выполнить функцию process_rtr около 50 тыс. Раз в 5-10 потоках на основе нашего текущего оборудования. Поэтому было бы здорово указать количество потоков / процессов, чтобы я мог настроить это по мере необходимости.
Большое спасибо за ваше время и помощь заранее.
Фрэнк