Как делаешь фоновые задачи
Python
Senior
Билайн
Как делаешь фоновые задачи
Ответы
В Python для фоновых задач можно использовать несколько подходов:
- **Потоки (threading)** - подходят для I/O-bound задач:
```
import threading
def background_task():
print("Running in background")
thread = threading.Thread(target=background_task)
thread.start()
```
- **Процессы (multiprocessing)** - для CPU-bound задач:
```
from multiprocessing import Process
def cpu_intensive():
print("CPU work")
process = Process(target=cpu_intensive)
process.start()
```
- **Асинхронность (asyncio)** - для I/O-bound с эффективным управлением:
```
import asyncio
async def async_task():
await asyncio.sleep(1)
print("Async done")
asyncio.create_task(async_task())
```
- **Очереди задач (Celery/RQ)** - для сложных распределенных задач:
```
# Пример с Celery
@app.task
def send_email():
# email logic
```
Выбор зависит от типа задачи:
- I/O-bound → threading или asyncio
- CPU-bound → multiprocessing
- Долгие/распределенные → Celery/RQ
Важно учитывать GIL и состояние гонки в многопоточности. Для простых задач достаточно threading, для сложных - лучше Celery.