2017-10-18 80 views
0

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

+0

我不明白它有多奇怪。这很平常,至少不是罕见的。 – Pac0

回答

0

开箱即用不能有这种行为。但它可以使用任务队列(芹菜或其他)和会话来解决。

@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...") 

的缺点是,你需要另一种观点轮询:伪例子 - 芹菜,这将使用任务的计算,存储在会话中的当前TASK_ID,并在必要时撤销它做任务状态并显示结果。