Sobes.tech
Junior — Middle
59

Каким образом можно реализовать параллельное выполнение задач, интенсивно использующих CPU, в Python?

Компании, где спрашивали
VKVK

Ответ от нейросети

sobes.tech AI

Для параллельного выполнения CPU-интенсивных задач в Python стандартный модуль threading неэффективен из-за GIL (Global Interpreter Lock), который не позволяет одновременно исполнять байт-код Python в нескольких потоках.

Основные способы реализации параллелизма для CPU-нагруженных задач:

  1. Модуль multiprocessing — создаёт отдельные процессы, каждый со своим интерпретатором Python и памятью, обходя GIL.
from multiprocessing import Pool

def cpu_bound_task(x):
    # пример CPU-интенсивной задачи
    return sum(i*i for i in range(x))

if __name__ == '__main__':
    with Pool(processes=4) as pool:
        results = pool.map(cpu_bound_task, [10**6, 10**6+1, 10**6+2, 10**6+3])
    print(results)
  1. Модуль concurrent.futures.ProcessPoolExecutor — более высокоуровневый интерфейс для работы с процессами.
from concurrent.futures import ProcessPoolExecutor

def cpu_bound_task(x):
    return sum(i*i for i in range(x))

with ProcessPoolExecutor(max_workers=4) as executor:
    results = list(executor.map(cpu_bound_task, [10**6, 10**6+1, 10**6+2, 10**6+3]))
print(results)
  1. Использование внешних библиотек (например, joblib, dask) для удобного параллелизма.

Таким образом, для CPU-интенсивных задач в Python рекомендуется использовать многопроцессность, а не многопоточность.