Django 1.6,具有多处理功能的Transaction.commit_on_success无法正常工作

时间:2014-05-08 12:12:56

标签: python django unit-testing multiprocessing django-unittest

我是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 job在django中运行这个文件。我在transaction_func中使用进程调用row_lock_method两次。由于测试运行成功,但这是在真正的数据库中,所以我想回滚在这个作业中完成的所有更改,所以我在两个for循环之后放置 raise 条件。因为这个异常发生在这里,它将回滚它 transaction.commit_on_success 。但我的问题是回滚在这里不起作用。即使没有错误消息即将到来。

我做错了什么。请回复。在此先感谢。

0 个答案:

没有答案