【发布时间】:2014-07-14 16:54:46
【问题描述】:
我目前正在寻找一种可以防止用户同时发出多个请求的解决方案。我希望在处理来自用户的第二个请求之前完成第一个请求。例如,假设用户 adam 喜欢和不喜欢 suzy 的照片。对照片的不喜欢和喜欢都发生在同一个视图中。
目前我遇到的问题是我同时处理两个请求。在like view的情况下,当用户喜欢某样东西时,我会创建一个like_object。当用户决定不喜欢某些东西时,我会检查数据库中是否存在like_object,然后将其删除。然而!如果第一个请求还没有完成,第二个请求中对like_object的检查会返回说没有like_object,它会创建第二个like_object。
一旦完成所有这些处理,我最终将拥有来自同一用户的同一张照片的 2 个like_objects。这很糟糕。
为了向您提供更多信息,我使用 Gunicorn 作为我的 HTTP 服务器。我运行 3 个普通工人,这就是为什么同时处理每个请求的原因。
那你觉得我能做什么?我的意思是,我正在考虑为此使用 Celery 和 RabbitMQ。每个请求将被提交到一个队列中并被异步处理。这是一种选择。但我觉得在这种情况下这可能是矫枉过正。我正在寻找可以直接在 Django 中完成的事情。嗯,让我知道可能的解决方案。
谢谢
【问题讨论】:
标签: python django rabbitmq celery