我已經做了一些與sqlite併發問題有關的閱讀,但我沒有看到它們如何應用到Django,因爲它本質上是單線程的。我沒有使用任何多進程模塊。我對於併發編程絕對沒有經驗,所以如果有人能夠確定爲什麼下面的代碼導致OperationalError:'數據庫被鎖定',我將不勝感激。Django和Sqlite併發問題
views.py
def screening(request, ovramt=None):
errors = []
if request.method == "POST":
form = ScreeningForm(request.POST)
if form.is_valid():
print "Woo valid!!"
return HttpResponse()
else: # GET
if ovramt is None:
o = Ovramt.objects.select_related(depth=1).latest("date_completed")
print "found?"
print o.id
else:
try:
o = Ovramt.objects.select_related(depth=1).get(id=ovramt)
except:
errors.append("OVRAMT NOT FOUND")
if o.residents.count() <= 0:
o.add_active_residents()
residents = list(o.residents)
models.py
def add_active_residents(self):
ssa_res = SSA_Resident.objects.select_related(depth=1).filter(ssa=self.ssa, active=True)
for r in ssa_res:
self.residents.add(r.resident) # Fails Here
self.save()
的add_active_residents方法工作得很好,直到它從視圖模塊調用。在視圖中打開的數據庫是否有開放連接,防止從模型中寫入數據?有人解釋爲什麼這段代碼會出錯嗎?
因此,每次您在視圖中調用add_active_residents時都會發生鎖定?什麼確切的線是拋出鎖異常(保存?)它是否發生在devserver中,或僅在生產環境中? – 2009-02-21 14:41:43
這發生在devserver中,只有當視圖調用add_active_residents時纔會發生。從命令行調用add_active_residents不會出錯。 – 2009-02-22 03:26:15