当新的请求出现时中止旧的请求

2024-04-27 04:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: django用户端点感兴趣复选框几秒钟
1条回答
网友
1楼 · 发布于 2024-04-27 04:31:51

您不能开箱即用,但可以使用任务队列(芹菜或其他)和会话解决此问题。对于芹菜,这将使用用于计算的任务来完成,将当前任务_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...")

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

相关问题 更多 >