我找不到一个很好的方法来锁定Django中的一个关键部分.我可以使用锁或信号量,但python实现仅用于线程,因此如果生产服务器分叉那么那些将不会被尊重.有没有人知道一种方式(我现在正在考虑posix信号量)以保证跨进程的锁定,或禁止这种方式阻止Django服务器分叉.
tak*_*mag 16
如果使用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;
Run Code Online (Sandbox Code Playgroud)
Tal*_*iss 13
使用Django内置的select_for_update函数.
https://docs.djangoproject.com/en/1.8/ref/models/querysets/#select-for-update
来自docs:
返回一个查询集,它将锁定行直到事务结束,生成SELECT ... FOR支持数据库上的UP语句SQL语句.
例如:
entries = Entry.objects.select_for_update().filter(author=request.user)
Run Code Online (Sandbox Code Playgroud)
所有匹配的条目将被锁定,直到事务块结束,这意味着将阻止其他事务更改或获取锁定.
| 归档时间: |
|
| 查看次数: |
13184 次 |
| 最近记录: |