Этот вопрос проверяет умение выбирать подходящий метод параллелизма для разных типов задач в Python.
Для CPU-bound задач используйте многопроцессность (модуль multiprocessing), чтобы обойти GIL и задействовать несколько ядер. Для IO-bound задач используйте многопоточность (модуль threading) или асинхронное программирование (модуль asyncio), чтобы эффективно ждать завершения операций ввода-вывода.
В Python разные типы задач требуют разных подходов к параллелизму из-за ограничений GIL.
Решение CPU-bound задач:
Используйте модуль multiprocessing, который создает отдельные процессы с собственным интерпретатором и памятью.
Это позволяет использовать несколько ядер CPU для параллельных вычислений.
Пример:
from multiprocessing import Pool
def cpu_task(x):
return x * x
with Pool(processes=4) as pool:
results = pool.map(cpu_task, range(10))Решение IO-bound задач:
Используйте модуль threading для создания потоков, которые могут ждать IO без блокировки.
Или используйте асинхронное программирование с asyncio для более эффективного управления большим количеством задач.
Пример с потоками:
import threading
import requests
def io_task(url):
response = requests.get(url)
return response.status_code
threads = []
for url in urls:
thread = threading.Thread(target=io_task, args=(url,))
thread.start()
threads.append(thread)
for thread in threads:
thread.join()