python diango 并发_python - django Model 并发写数据出现重复值
問 題
view視圖代碼:
@login_required
def data(request, page, keyword,strEncode):
current_username = request.user
data_s = dosomething() #花費比較長的時間
if not UserRecord.objects.filter(user=User.objects.get(username=current_username),MyRecords=keyword):
UserRecord.objects.create(user=User.objects.get(username=current_username),MyRecords=keyword)
return JsonResponse(data_s, safe=False)
模型代碼:
class UserRecord(models.Model):
user = models.ForeignKey(User)
MyRecords = models.CharField(max_length=128)
def __unicode__(self):
return self.user.username
現在我重復請求(快速,無間隔)5次http://127.0.0.1:8000/1/test/...(類似多線程并發),由于視圖里面的dosomething函數會消耗比較長的時間,5個請求會并發進行,由于是并發,數據庫中會記錄5個test值,本意只想記錄一個,怎么解決這個問題?django有沒有像線程鎖一樣的東西,或者臨界區類似的?lock.acquire(),lock.release()?
解決方案
django默認沒有提供鎖,你可以使用其他服務提供的鎖服務,比如數據庫的。
不過看你的需求可以有更簡單的做法:
設置MyRecords字段為unique
MyRecords = models.CharField(max_length=128, unique=True)
在create record時catch InterityError異常
from django.db import IntegrityError
try:
UserRecord.objects.create(
user=User.objects.get(username=current_username), MyRecords=keyword
)
except IntegrityError:
pass
掃一掃關注IT屋
微信公眾號搜索 “ IT屋 ” ,選擇關注與百萬開發者在一起
總結
以上是生活随笔為你收集整理的python diango 并发_python - django Model 并发写数据出现重复值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: seo专题之开篇有益
- 下一篇: ipython和python怎么用_如何