我为这条极长的消息道歉,但我对此很新,需要您对 Python 和 Django 的知识和建议。
基本上,我正在开发一个小的" 问题和答案" game.I有一个模型,包含所有问题及其代码等。
参与者将登录(每个游戏可能有5到20名参与者),并且在屏幕上,他们将有一个选项,说明" 问一个问题" 。所有参与者可以同时点击该按钮,那么我如何确保每个用户都能获得不同的问题?显然我已经想过,在放置 true / false 字段时,如果问题已经被使用过了,那么这个想法是为了避免重复。
我来自 JAVA ,因此同步方法不允许同时访问该方法,避免重复结果。那么 Python 中有类似的东西吗?或者有没有办法避免重复?
非常感谢!
答案 0 :(得分:0)
您可以使用transaction.atomic
和用作标记的字段来指示已提供问题。 (is_asked
?)
def myview(request):
with transaction.atomic():
valid_questions = Question.objects.select_for_update()\
.filter(is_asked=False)
# some code here to get a valid question
# and return the question, then saving it as being
# is_asked = True before exiting the atomic block.
transaction.atomic()
保证整个交互包含在单个事务中,select_for_update()
锁定表,直到此事务完成。这样,并发点击等待其轮流,数据库在下一次查找之前处于一致状态。