Какие риски выполнения задач знаешь
Python
Middle
Без компании
Какие риски выполнения задач знаешь
Ответы
- **Deadlock** – взаимная блокировка потоков, когда каждый ждёт освобождения ресурса другим.
```
import threading
lock1 = threading.Lock()
lock2 = threading.Lock()
def thread1():
with lock1:
with lock2: # Может заблокироваться, если thread2 уже взял lock2
pass
```
- **Race Condition** – недетерминированное поведение из-за порядка выполнения потоков.
```
counter = 0
def increment():
global counter
counter += 1 # Не атомарная операция!
```
- **Memory Leaks** – утечки памяти, особенно при циклических ссылках (например, в графах объектов).
```
class Node:
def __init__(self):
self.parent = None # Циклическая ссылка, если parent ссылается обратно
```
- **Безопасность данных** – SQL-инъекции, XSS (если Python используется в вебе).
```
# Плохо:
query = f"SELECT * FROM users WHERE name = '{user_input}'"
# Лучше:
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
```
- **Производительность** – например, неоптимальные запросы к БД (N+1 проблема), блокирующие вызовы в асинхронном коде.
- **Ошибки окружения** – зависимости, версии Python, переменные окружения.
**Способы снижения рисков:**
- Использование `threading.Lock`, `asyncio`, `multiprocessing`.
- Профилирование (например, `cProfile`).
- Статический анализ (`mypy`, `pylint`).
- Тестирование (юнит-тесты, нагрузочные тесты).