Middle
44
Hata ayıklama görevi: Para çekme sırasında yarış durumu sorununu düzeltmek (iki paralel istek, hesapta olan miktardan fazla çekebilir)
Sorulan şirketler
aic
AI'dan gelen yanıt
sobes.tech yapay zeka
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.