Junior — Middle
60
Каким образом можно реализовать параллельное выполнение задач, интенсивно использующих CPU, в Python?
Companies where asked
Answer from AI
sobes.tech AI
Для параллельного выполнения CPU-интенсивных задач в Python стандартный модуль threading неэффективен из-за GIL (Global Interpreter Lock), который не позволяет одновременно исполнять байт-код Python в нескольких потоках.
Основные способы реализации параллелизма для CPU-нагруженных задач:
- Модуль
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)
- Модуль
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)
- Использование внешних библиотек (например,
joblib,dask) для удобного параллелизма.
Таким образом, для CPU-интенсивных задач в Python рекомендуется использовать многопроцессность, а не многопоточность.