如何修改Django中模型的行为,以便在选择它们时自动锁定和解锁数据库中的记录,并使这种行为对程序员透明?我已经知道如何锁定和解锁一个记录(database record locking),但我们想知道这段代码应该放在Django模型中的什么位置。我希望它适用于所有的all()、filter()、exclude()和其他查询,在save()和不保存任何内容的查询中都应该调用unlocking。在
更新:此应用程序有多个线程,可以由两个或多个服务器同时运行,我希望确保公共数据库中的记录不会被多个线程处理。线程搜索一些记录,然后通过套接字发送一些数据,最后更新这些记录。换句话说,除了Django网站还有服务器。在
您将希望在模型
__init__()
期间获得锁;这可以非常简单地通过继承实现。模型的Manager
将为该模型实例化一个QuerySet
,当检索到的模型添加到查询_result_cache[]
或调用查询的iterator()
时,将立即获得您的锁。当然,如果模型没有关联的pk
,那么您必须确保放弃锁争用。在如果不想进行DB级锁定,可以查看Django-cachebot。它处理模型失效,但最重要的是它可以将模型记录保存在线程的公共存储中,因此您可以实现模型锁定状态,并将其推送到存储区并由其他线程查询。在
我也有一种冲动,想给你一个奇怪的问题大做文章。我真的不知道你在家里会怎么做!在
相关问题 更多 >
编程相关推荐