И многое другое

i mnogoe drugoe Системные инструменты параллельного выполнения

Наконец, пакет 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

Оцените статью
Секреты программирования
Добавить комментарий