Как организовывал многозадачность в своих проектах
Python
Senior
Okko
Как организовывал многозадачность в своих проектах
Ответы
Для многозадачности в Python чаще всего использую:
- **Потоки (threading)** - для I/O-bound задач:
```
from threading import Thread
def task():
print("Выполняю задачу в потоке")
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 worker():
print("Процесс выполняет работу")
procs = [Process(target=worker) for _ in range(4)]
for p in procs: p.start()
for p in procs: p.join()
```
- **Асинхронность (asyncio)** - для высоконагруженных сетевых приложений:
```
import asyncio
async def fetch_data():
await asyncio.sleep(1)
return "Данные"
async def main():
tasks = [fetch_data() for _ in range(3)]
results = await asyncio.gather(*tasks)
print(results)
asyncio.run(main())
```
Выбор зависит от задачи:
- Потоки для множества I/O операций (запросы, файлы)
- Процессы для тяжелых вычислений
- Asyncio для сетевых сервисов с высокой нагрузкой
Важно учитывать GIL и правильно синхронизировать доступ к общим ресурсам.