Какие знаешь способы распараллеливания задач в Python
Python
Middle
Без компании
Какие знаешь способы распараллеливания задач в Python
Ответы
В Python есть несколько способов распараллеливания:
- **Threading** (многопоточность) - подходит для I/O-bound задач. GIL ограничивает выполнение CPU-bound задач.
```
from threading import Thread
def task():
print("Working...")
threads = [Thread(target=task) for _ in range(5)]
for t in threads: t.start()
for t in threads: t.join()
```
- **Multiprocessing** - для CPU-bound задач, создает отдельные процессы.
```
from multiprocessing import Process
def task():
print("Processing...")
processes = [Process(target=task) for _ in range(5)]
for p in processes: p.start()
for p in processes: p.join()
```
- **Asyncio** - для асинхронного выполнения I/O-bound задач.
```
import asyncio
async def task():
print("Async working...")
async def main():
await asyncio.gather(*[task() for _ in range(5)])
asyncio.run(main())
```
- **Concurrent.futures** - высокоуровневый интерфейс.
```
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor() as executor:
executor.map(lambda x: x*2, range(5))
```
- **Celery** - для распределенных задач (через брокеры сообщений).
Выбор зависит от типа задачи (CPU/I/O-bound) и требований к производительности.