Состояние гонки в Python ⇐ Python

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

Сообщение Anonymous »

Я пытаюсь рассказать своим студентам о гонках в Интернете и для этой цели использую простой банковский пример, в котором мы переводим сумму от человека А на счет человека Б. Если мы будем использовать Burp и отправлять одновременные запросы, например, 20-30, операция добавления завершится; однако операция вычитания завершится позже. Итак, если у человека А есть 20 долларов, а у человека Б — 0 долларов.
Как только я отправлю запрос на перевод 20 долларов от А к Б (запрос на 20 симуляций), есть вероятность, что счет человека Б получит 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?
Я уверен, что состояние гонки возможно в Python и sqlite

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

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