Я пытаюсь использовать пакет multiprocessing
для Python
. При изучении учебников наиболее ясный и простой метод, по-видимому, использует pool.map
, который позволяет пользователю легко определить количество процессов и передать функцию pool.map
и список значений для этой функции для распространения по центральным процессорам, Другой метод, с которым я столкнулся, - использование очередей для управления пулом работников. Этот ответ дает отличную работу, объясняющую разницу между pool.map
, pool.apply
и pool.apply_async
, но каковы преимущества и недостатки использования pool.map
против используя очереди, как в этом пример?
Python Multiprocessing: pool.map с использованием очередей
Ответ 1
Метод pool.map
- это "подмножество" метода с очередями. То есть без pool.map
вы можете легко реализовать его с помощью Pool
и Queue
. Тем не менее, использование очередей дает вам большую гибкость в управлении процессами пула, т.е. Вы можете сделать так, чтобы отдельные типы сообщений читались только один раз за время жизни каждого процесса, контролировали поведение выключения пула и т.д.
Ответ 2
Если вы действительно ищете "самую ясную и самую простую технику", использование concurrent.futures.ProcessPoolExecutor
, вероятно, самый простой способ. Он имеет метод map
, а также некоторые другие примитивы, которые делают его очень удобным. Он также совместим с Queue
s.