Вопрос проверяет понимание многопроцессорности в Python и умение выбирать между процессами и потоками для CPU-bound задач.
Process pool (пул процессов) из модуля multiprocessing в Python предназначен для параллельного выполнения задач, которые интенсивно нагружают процессор (CPU-bound). В таких задачах основное время тратится на вычисления, а не на ожидание ввода-вывода. Использование потоков (threading) для CPU-bound задач неэффективно из-за Global Interpreter Lock (GIL), который позволяет выполнять только один поток за раз. Процессы же имеют отдельные интерпретаторы и память, поэтому GIL не мешает.
from multiprocessing import Pool
import math
def compute_square(x):
return math.sqrt(x ** 2 + x ** 3)
if __name__ == '__main__':
numbers = range(1, 1000001)
with Pool(processes=4) as pool:
results = pool.map(compute_square, numbers)
print('Done')В этом примере пул из 4 процессов параллельно вычисляет функцию для каждого числа. Без пула это выполнялось бы последовательно в одном процессе.
Process pool следует применять для CPU-bound задач, где требуется максимальная производительность за счёт использования всех ядер процессора. Для I/O-bound задач выбирайте threading или asyncio, чтобы избежать лишних накладных расходов.