Я новичок в Django и пытаюсь написать несколько тестов.
В моем коде я делаю некоторую транзакцию. Для этой цели я заблокировал свой код, используя select_for_update в джанго. Теперь я хочу проверить, работает ли блокировка правильно или нет. Я запускаю 2 или более процессов одновременно, поэтому он разрешает только первый процесс и ждет здесь завершения первого процесса, а затем продолжается другой процесс.
#here XYZ and ABC are models.
@transaction.commit_on_success
def transaction_func():
exp1 = ABC(a = 5)
exp1.save()
process_list =[]
for i in xrange(2):
p = Process(target=row_lock_method, args=('some_string',))
p.start()
time.sleep(3)
process_list.append(p)
for each in process_list:
each.join()
raise
def row_lock_method(code):
exp2 = XYZ(b = code)
exp2.save()
client = Client()
client.login(username='[email protected]', password='sample123')
response = client.post('some_url',{'exp2':exp2},follow=True)
Здесь приведенный выше код находится в другом файле представления. Поэтому я использовал здесь задание cron для запуска этого файла в django. Я дважды вызываю row_lock_method в transaction_func, используя process. Поскольку тест выполнен успешно, но это в реальной базе данных, поэтому я хочу отменить все изменения, сделанные в этом задании, поэтому я помещаю условие raise после обоих циклов for. Таким образом, это исключение возникает здесь, и оно откатывает его через transaction.commit_on_success. но моя проблема в том, что откат здесь не работает. Даже сообщение об ошибке не приходит.
Я делаю что-то не так. Пожалуйста, ответьте. Заранее спасибо.