Django多线程测试,对数据库的更改不会持久

时间:2019-10-24 02:15:15

标签: django multithreading

我试图复制我们在生产服务器上遇到的问题,在该问题上,如果发出两个保存或更新请求以及现有对象,如果间隔非常近,则会导致创建两个实例,而不是后来的一个(即使慢了几毫秒)更新了现有的一个。为了测试我们提出的防止这种情况的解决方案,我试图通过多处理来复制这种情况。我遇到的唯一问题是两个进程运行并完成后,当我在main函数中查询数据库时,尽管子进程中通过了相同的测试,但据称在子进程中所做的更改并未持久。代码提取:

def save_a_generic_model(self, id):
    data = {'value': '1'}
    request = RequestFactory().post('/api/responses/',
                                    data=json.dumps(data),
                                    content_type='application/json')
    request.user = self.user

    print(f'Process {id} started at {time()}')
    response = self.view(request)
    self.assertEqual(response.status_code, 202)
    self.assertEqual(len(models.GenericModel.objects.all()), 1)
    print(f'Process {id} finished at {time()}')


def test_multiple_post_to_api(self):      
    jobs = []
    db.connections.close_all()

    for i in range(0, 2):
        jobs.append(Process(target=self.save_a_generic_model, args=(i,)))

    for i in range(0, 2):
        jobs[i].start()

    for i in range(0, 2):
        jobs[i].join()

    self.assertEqual(len(models.GenericModel.objects.all()), 1) # Fails here

0 个答案:

没有答案