Наконец, пакет multiprocessing предоставляет множество других инструментов, не демонстрировавшихся в примерах выше, включая инструменты синхронизации по условиям, событиям и с помощью семафоров, а также локальные и удаленные менеджеры, реализующие серверы для управления совместно используемыми объектами. Так, в примере 5.34 демонстрируется поддержка пулов (pools) — групп дочерних процессов, совместно работающих над решением определенной задачи.
Пример 5.34. PP4E\System\Processes\multi6.py
Плюс многое другое: пулы процессов, менеджеры, блокировки, условные переменные,…
import os
from multiprocessing import Pool
def powers(x):
#print(os.getpid()) # раскомментируйте, чтобы увидеть работу потомков return 2 ** x
if __name__ == ‘__main__’:
workers = Pool(processes=5)
results = workers.map(powers, [2]*100)
print(results[:16])
print(results[-2:])
results = workers.map(powers, range(100))
print(results[:16])
print(results[-2:])
После запуска Python равномерно распределит задания между рабочими процессами, выполняющимися параллельно:
C:\…\PP4E\System\Processes> multi6.py
[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
[4, 4]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768] [316912650057057350374175801344, 633825300114114700748351602688]
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011