当较新的请求到来时中止较旧的请求

时间:2017-10-18 11:42:19

标签: python django

我的问题可能听起来有点奇怪,但我想要做的就是停止计算当前请求的一些响应(我的端点非常“重”并需要几秒钟才能完成)用户将另一个更新的请求发送到同一端点。例如,用户可以使用过滤复选框,因此我总是对最近的请求感兴趣(之前的请求可以安全地中止)。这种行为是否可以在Django中实现?感谢。

1 个答案:

答案 0 :(得分:0)

你不能开箱即用,没有。但它可以使用任务队列(芹菜或其他)和会话来解决。使用Celery,可以使用计算任务,将当前task_id存储在会话中,并在必要时撤消它 - 伪代码示例:

@task
def some_computation(*args, **kw):
   your_code_here
   return 42


def someview(request, ...):
    prev = request.session.get("mytaskid", None)
    if prev:
        prev.revoke()
    new = some_computation.apply_async(...)
    request.session["mytaskid"] = new
    return HttpResponse("we are computing...")

缺点是您需要另一个视图来轮询任务状态并显示结果。