Проблема : приемник сигнала проверяет, существует ли запись модели для определенных условий, и, если нет, создает новую запись.В некоторых редких случаях запись дублируется.
В функции приемника:
try:
my_instance = MyModel.objects.get(field1=value1, field2=sender)
except:
my_instance = MyModel(field1=value1, field2=sender)
my_instance.save()
Это очевидный кандидат на get_or_create
, но кроме очистки этого кода, поможет ли get_or_create
предотвратить эту проблему?
Сигнал отправляется после действия пользователя, но я не верю, что исходный запрос дублируется, потому что это вызвало бы другие действия.
Дублирование происходило несколько раз в тысячах случаев.Обязательно ли это вызвано несколькими запросами или есть какой-то способ создать дублирующую нить?И есть ли способ - возможно, с гранулярным управлением транзакциями - предотвратить дублирование?
Использование Django 1.1, Python 2.4, PostgreSQL 8.1 и mod_wsgi на Apache2.