我的问题可能听起来有点奇怪,但我想要做的就是停止计算当前请求的一些响应(我的端点非常“重”并需要几秒钟才能完成)用户将另一个更新的请求发送到同一端点。例如,用户可以使用过滤复选框,因此我总是对最近的请求感兴趣(之前的请求可以安全地中止)。这种行为是否可以在Django中实现?感谢。
答案 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...")
缺点是您需要另一个视图来轮询任务状态并显示结果。