在Djang中实现自动锁定和解锁记录应该重写哪些方法

2024-04-24 21:16:58 发布

您现在位置:Python中文网/ 问答频道 /正文

如何修改Django中模型的行为,以便在选择它们时自动锁定和解锁数据库中的记录,并使这种行为对程序员透明?我已经知道如何锁定和解锁一个记录(database record locking),但我们想知道这段代码应该放在Django模型中的什么位置。我希望它适用于所有的all()、filter()、exclude()和其他查询,在save()和不保存任何内容的查询中都应该调用unlocking。在

更新:此应用程序有多个线程,可以由两个或多个服务器同时运行,我希望确保公共数据库中的记录不会被多个线程处理。线程搜索一些记录,然后通过套接字发送一些数据,最后更新这些记录。换句话说,除了Django网站还有服务器。在


Tags: django代码模型服务器数据库lockingsave记录
1条回答
网友
1楼 · 发布于 2024-04-24 21:16:58

您将希望在模型__init__()期间获得锁;这可以非常简单地通过继承实现。模型的Manager将为该模型实例化一个QuerySet,当检索到的模型添加到查询_result_cache[]或调用查询的iterator()时,将立即获得您的锁。当然,如果模型没有关联的pk,那么您必须确保放弃锁争用。在

如果不想进行DB级锁定,可以查看Django-cachebot。它处理模型失效,但最重要的是它可以将模型记录保存在线程的公共存储中,因此您可以实现模型锁定状态,并将其推送到存储区并由其他线程查询。在

我也有一种冲动,想给你一个奇怪的问题大做文章。我真的不知道你在家里会怎么做!在

相关问题 更多 >