1
내 응용 프로그램의 한 부분에서 여러 스레드가 동일한 영구 객체를 만들 수있는 경쟁 조건이 있습니다. 그래서 다음과 같습니다 코드 구현 :Django ORM + MySQL/InnoDB와 경쟁 조건을 잡아내는 올바른 방법
from foobar.models import Bar
def testomatic(request):
bar = None
tries = 0
while not bar:
try:
bar = Bar.objects.get(b=2)
except Bar.DoesNotExist:
time.sleep(10) # put in here to force the race condition
bar = Bar(a = 2, b = 2)
try:
bar.save()
except IntegrityError:
tries += 1
bar = None
if tries > 1:
raise Exception("something bad happened")
return HttpResponse("tries = %s" % tries)
그리고 이것은 내 테스트 환경에서 작동 확인을 -하지만 난 "진짜"클래스와 함께이 프로그램을 실행할 때, 반복 (가져 오기에서 아무것도 점점없고, 회전 보인다)하지만 항상 save()에서 IntegrityError를 얻습니다.
데이터베이스 엔진으로 MySQL/InnoDB를 사용하고 있습니다. 레코드를 얻지 못하게하는 MVCC 처리에 대한 것이 있습니까?하지만이를 만들려고 할 때 중복 키 오류가 발생합니다.
이 형식은 http://stackoverflow.com/questions/2235318/how-do-i-deal-with-this-race-condition-in-django의 복제본이며 답변은 거기에 있습니다. –