К настоящему моменту у вас должно сложиться общее представление о параллельно выполняющихся процессах и потоках, а также об инструментах в языке Python для управления ими. Далее в главе мы вернемся к этим идеям, когда будем знакомиться с пакетом multiprocessing — инструментом из стандартной библиотеки, объединяющим в себе простоту и переносимость потоков с преимуществами процессов, — за счет реализации прикладного интерфейса, напоминающего потоки, который вместо потоков запускает процессы. Он стремится решить проблемы переносимости поддержки процессов и ограничений на использование преимуществ многопроцессорных систем, накладываемых блокировкой GIL. Но в некоторых ситуациях он не может использоваться как замена приему ветвления процессов и накладывает ряд ограничений, которые отсутствуют при работе с потоками, проистекающих из особенностей модели процессов (например, изменяемые объекты не могут использоваться непосредственно, потому что их приходится копировать через границы процессов, а объекты, не поддерживающие возможность сериализации, такие как связанные методы, вообще не могут использоваться).
Пакет multiprocessing реализует набор инструментов, упрощающих такие задачи, как взаимодействие между процессами и передача кода завершения. Поэтому мы сначала исследуем поддержку этих возможностей в языке Python и попутно рассмотрим еще несколько примеров использования потоков выполнения и процессов.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011