Middle
29
Дебаг тапсырмасы: ақша шығару кезінде race condition-ды түзету (екі параллель сұрау шоттағыдан көп шығара алады)
Сұралған компаниялар
aic
AI-дан жауап
sobes.tech AI
Race condition при списании денег возникает, когда два параллельных запроса одновременно проверяют баланс и списывают деньги, не видя изменений друг друга, что может привести к списанию суммы больше, чем есть на счёте.
Чтобы исправить это в Python, нужно обеспечить атомарность операции списания. Один из способов — использовать блокировку (lock), чтобы только один поток мог выполнять проверку и списание одновременно.
Пример с использованием threading.Lock:
import threading
class Account:
def __init__(self, balance):
self.balance = balance
self.lock = threading.Lock()
def withdraw(self, amount):
with self.lock: # блокируем доступ для других потоков
if self.balance >= amount:
self.balance -= amount
return True
else:
return False
account = Account(100)
# Вызовы account.withdraw(amount) из разных потоков будут безопасны
Если используется база данных, лучше применить транзакции с блокировками или атомарные операции на уровне БД, чтобы избежать race condition.