1

我是 Django 的新手,正在尝试编写一些测试用例。

在我的代码中,我正在做一些交易。为此,我在 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='gaurav@example.com', password='sample123')
    response = client.post('some_url',{'exp2':exp2},follow=True)

这里上面的代码在其他视图文件中。所以我在这里使用cron作业在django中运行这个文件。我使用进程在 transaction_func 中调用 row_lock_method 两次。由于测试成功运行,但这是在真实数据库中,所以我想回滚在此作业中完成的所有更改,所以我在两个 for 循环之后都设置了raise条件。所以这里发生异常,它将通过transaction.commit_on_success回滚。但我的问题是回滚在这里不起作用。甚至没有错误消息出现。

我做错了什么吗。请回复。提前致谢。

4

0 回答 0