Какие подходы применял для параллельной обработки данных
Python
Middle
Без компании
Какие подходы применял для параллельной обработки данных
Ответы
В Python для параллельной обработки данных часто используют:
- **Потоки (threading)** – подходят для I/O-bound задач (например, сетевые запросы).
```
import threading
def task():
print("Thread running")
threads = [threading.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 Pool
def square(x):
return x * x
with Pool(4) as p:
print(p.map(square, [1, 2, 3]))
```
- **Asyncio** – асинхронность для I/O-bound задач с корутинами.
```
import asyncio
async def fetch_data():
await asyncio.sleep(1)
return "Data"
async def main():
tasks = [fetch_data() for _ in range(3)]
results = await asyncio.gather(*tasks)
asyncio.run(main())
```
- **Dask/Ray** – для распределенных вычислений и больших данных.
Нюансы:
- GIL ограничивает потоки в CPU-bound задачах.
- Процессы имеют накладные расходы на создание.
- Asyncio требует переписывания кода под async/await.