我试图复制我们正在生产服务器上遇到的一个问题,如果两个请求被保存或更新和现有的对象,如果在非常接近的间隔进行,将导致两个实例被创建而不是后来的一个(即使以毫秒减慢)更新现有的一个实例。为了测试我们为防止这种情况而提出的任何解决方案,我试图通过多处理来复制这种情况。我遇到的唯一问题是,在两个进程运行并完成之后,当我在主函数中查询数据库时,尽管子进程中通过了相同的测试,但子进程中所做的更改并没有持久化。代码摘录:
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