一尘不染

如何在Django中锁定关键部分?

django

我找不到在Django中锁定关键部分的好方法。我可以使用锁或信号灯,但python实现仅适用于线程,因此,如果生产服务器派生,则将不遵守这些要求。有谁知道一种方法(我现在正在考虑posix信号量)来确保跨进程的锁定,或者禁止这种方法来阻止Django服务器派生。


阅读 512

收藏
2020-03-31

共2个答案

一尘不染

当你的应用突然需要在多个服务上运行时,你需要一个分布式锁管理器。我为此目的写了elock。有更大的建议,而其他人则选择忽略每个建议,并使用memcached做同样的事情。

除轻型建议锁定外,请勿将memcached用于其他用途。它旨在遗忘东西。

我喜欢假装在制作Web应用程序时文件系统不存在。使规模更好。

2020-03-31
一尘不染

如果使用RDBMS,则可以使用其“ LOCK”机制。例如,当一个“ SELECT FOR UPDATE”事务锁定一行时,与此行的另一个“ SELECT FOR UPDATE”事务必须等待。

# You can use any Python DB API.
[SQL] BEGIN;

[SQL] SELECT col_name FROM table_name where id = 1 FOR UPDATE;

[Process some python code]

[SQL] COMMIT;
2020-03-31