Что будет быстрее работать многопоточность (multithreading) или асинхронизация, если нужно у каждого
Python
Middle
Без компании
Что будет быстрее работать многопоточность (multithreading) или асинхронизация, если нужно у каждого файла уменьшить размер и положить в другую папку
Ответы
В Python из-за GIL (Global Interpreter Lock) многопоточность не даст выигрыша для CPU-bound задач (как уменьшение изображений). Лучше использовать **multiprocessing** или **asyncio + threads** для I/O-bound операций.
Для этой задачи оптимально:
- **Asyncio + ThreadPoolExecutor** – если работа с файлами (I/O-bound)
- **Multiprocessing** – если само уменьшение изображений CPU-bound
Пример с ThreadPoolExecutor:
```
from concurrent.futures import ThreadPoolExecutor
import os
from PIL import Image
def resize_image(path_in, path_out):
img = Image.open(path_in)
img.thumbnail((500, 500))
img.save(path_out)
with ThreadPoolExecutor(max_workers=8) as executor:
for file in os.listdir('input_folder'):
executor.submit(resize_image, f'input_folder/{file}', f'output_folder/{file}')
```
Итог:
- Для I/O (чтение/запись) – асинхронность или потоки
- Для CPU (обработка) – процессы