我測試我的應用程序的併發 我使用Django的併發Django的併發無所事事
對於每一個模型添加
from concurrency.fields import IntegerVersionField
version = IntegerVersionField()
所以我用2瀏覽器窗口,我的應用程序打開。記錄2個不同的用戶和編輯兩個相同的記錄。保存一個,然後我保存第二個,總是第二個只覆蓋第一個。基本上什麼都不做。 預計在我的第二次保存時出現錯誤。
可能是什麼問題?
我測試我的應用程序的併發 我使用Django的併發Django的併發無所事事
對於每一個模型添加
from concurrency.fields import IntegerVersionField
version = IntegerVersionField()
所以我用2瀏覽器窗口,我的應用程序打開。記錄2個不同的用戶和編輯兩個相同的記錄。保存一個,然後我保存第二個,總是第二個只覆蓋第一個。基本上什麼都不做。 預計在我的第二次保存時出現錯誤。
可能是什麼問題?
我從來沒有使用Django的併發性,如果我遇到應用程式,提供抽象的併發性,基於併發的一般性概念事務管理運行等我跑了一英里。這種行爲看起來不錯。這裏沒有錯誤。
django-concurrency是Django的樂觀鎖[1]實現 Django。
支持的Django版本:1.8.x的,1.9.x的,1.10.x.,1.11.x
它可以防止用戶從UI 和Django的命令在Django都做併發編輯。
這實際上意味着兩個用戶不能同時修改同一個實例。在剛試過的兩種瀏覽器測試中,這種情況永遠不會產生!通常發生的事情是其中一個或另一個事務通常會完成,因爲在localhost上的小型數據庫上進行測試時,沒有延遲,所有事情都會立即發生。
測試,這是開拓,以不同的變化彈正確的方法,因爲Django的併發指南中列出開拓相同的實例和編輯。或者使用多線程客戶端進行測試。
謝謝,我認爲它會創建一個新的版本ID,當我保存和當我再次保存時,它會檢查版本ID是不同的,然後當前有一個,並會給第二次保存錯誤... 如果它只是解決同一時刻節省的情況並不是那麼有用。 –
是的,這可能會更好地手動處理交易,而不是通過黑匣子 – e4c5