0
我跑了一堆異步的工人,並希望通過建立一個交易:Django的交易通過列值
UPDATE
我要確保:
兩個aysnc工人不會覆蓋同騎
和
兩個異步工人不相同的分配車騎
def my_func(ride_id):
ride = Ride.objects.get(id=ride_id)
if not ride.driver_id:
with transaction.atomic():
driver_id = find_best_driver_not_assigned() # this could return same driver in two different workers
# This code executes inside a transaction.
ride.driver_id = 1
ride.save()
driver_id列最初保持空白。但是任何「贏得」或更新字段的人都應該阻止來自其他異步芹菜工作者的任何其他寫入。
問題是,這ride
條目的route
字段正在更新每秒,我只想要一個例外,如果有人試圖更新driver_id
字段。
這項工作?
這太棒了!謝謝 – DaynaJuliana
我應該注意哪些例外?一個如果過濾器失敗,另一個如果更新失敗? – DaynaJuliana
@DaynaJuliana:樂於助人。沒有任何異常可以捕獲 - 根據'driver_id'是否已經存在,返回值將簡單地爲'0'或'1'。 (好吧,DatabaseErrors對任何查詢都是可能的,但在這方面沒有什麼特別的關於'filter()'和'update()')。 –