2017-10-18 12 views
0

私の質問はちょっと奇妙に聞こえるかもしれませんが、私がやりたいことは現在のリクエストのレスポンスを計算しないことです(私が持っているエンドポイントはかなり重いです。ユーザーが別の更新された要求を同じエンドポイントに送信するとすぐに)終了します。たとえば、ユーザーはフィルタリングチェックボックスを使用してプレイすることができるため、常に最新のリクエストに興味があります(以前のリクエストは安全に中止できます)。この動作はDjangoで実装可能ですか?ありがとう。新しいものが来たら古いリクエストを中止する

+0

どのように奇妙なのか分かりません。これはまれなことではなく、かなり普通のことです。 – Pac0

答えて

0

この動作をそのまま使用することはできません。しかし、それはタスク・キュー(セロリーまたはその他)およびセッションを使用して解決できます。セロリと、このセッションでは、現在の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...") 

欠点は、あなたがポーリングする別のビューをする必要がありますということですタスクの状態を表示し、結果を表示します。

関連する問題