Я пытаюсь повторить проблему, с которой мы сталкиваемся на нашем производственном сервере, когда кажется, что два запроса на сохранение или обновление существующего объекта, если они сделаны с очень близким интервалом, приведут к созданию двух экземпляров вместопозже один (даже если медленнее на миллисекунды) обновляет существующий. Чтобы протестировать любое решение, которое мы придумали, чтобы предотвратить это, я пытаюсь воспроизвести это через многопроцессорность. Единственная проблема, с которой я сталкиваюсь, заключается в том, что после запуска и завершения двух процессов, когда я запрашиваю базу данных в основной функции, изменения, предположительно сделанные в подпроцессах, не сохраняются, несмотря на те же тесты, проходящие в подпроцессах. Извлечение кода:
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