Что я хотел бы сделать, так это отслеживать, как используется системный ресурс, и динамически увеличивать / уменьшать количество работников в пуле.
У меня есть 24-ядерный узел с 48 ГБ ОЗУ, и я читаю в файле данных 4 ГБ, который мне нужно отфильтровать. Система также используется другими, поэтому доступная память меняется со временем. Поскольку входные данные 4 ГБ реплицируются на всех работников (мне еще предстоит найти способ, как этого избежать, так как они нужны мне только в режиме «только для чтения»), рекомендации приветствуются, это dict () из dicts () и списков ) это означает, что я не могу порождать 24 рабочих, так как у меня сразу кончается память. Поэтому я хотел бы запустить процесс, скажем, с безопасным числом из 6 рабочих, а затем наблюдать за использованием памяти и порождать дополнительных рабочих в пул, а если использование памяти становится высоким, уменьшите количество рабочих (т.е. дайте некоторым завершиться). , но не ставить новые задачи в этих рабочих больше). Таким образом, я мог бы максимально использовать узел, сохраняя при этом использование оперативной памяти <95%. </p>
Причина, по которой это будет эффективно, заключается в том, что весь код выполняется в течение нескольких часов даже с 6-12 параллельными работниками, поэтому, если я даже смогу на некоторое время увеличить количество работников на 20-30%, это уменьшит общее выполнение. время.
Прямо сейчас я использовал методы Pool.map () и Pool.apply_async () для отправки задач в пул, поэтому у меня нет прямых предпочтений, если один метод работает лучше, чем другой.
Заранее спасибо за рекомендации.