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()')。 –