Состояние гонки в PythonPython

Программы на Python
Ответить
Anonymous
 Состояние гонки в Python

Сообщение Anonymous »

Я пытаюсь рассказать своим студентам о гонках в Интернете и для этой цели использую простой банковский пример, в котором мы переводим сумму от человека А на счет человека Б. Если мы будем использовать Burp и отправлять одновременные запросы, например, 20-30, операция добавления завершится; однако операция вычитания завершится позже. Итак, если у человека А есть 20 долларов, а у человека Б — 0 долларов. Как только я отправлю запрос на перевод 20 долларов США из A в B (запрос на 20 симуляций), есть вероятность, что учетная запись лица B получит 20 долларов США более одного раза. Вот мой код

Код: Выделить всё

  if user['balance'] >= amount:

# Credit the target user's account
conn.execute('UPDATE users SET balance = balance + ? WHERE account_number = ?',
(amount, target_account_number))
conn.close()  # Immediately close connection to force an early write

# Simulate a delay to allow race condition
import time
time.sleep(2)  # Simulate delay

# Open a new connection for the debit operation
conn = get_db()

# Debit the sender's account
conn.execute('UPDATE users SET balance = balance - ? WHERE account_number = ?',
(amount, session['user']))
conn.close()  # Close connection to apply the change immediately

flash(f'Success! Transferred ${amount} to account {target_account_number}.')
else:
flash('Insufficient funds.')

return redirect(url_for('dashboard'))

Что-то я делаю неправильно в условиях гонки? мой бэкэнд - SQLITE

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»