リクエストがある場合、まずdjangoで応答を返し、DBを更新するような作業を続けますか?Django - 応答を返してDBを更新します
これはパフォーマンス上の理由によるものです。ユーザーには非常に早い回答が得られますが、DBの更新には時間がかかります。
ありがとうございました。
リクエストがある場合、まずdjangoで応答を返し、DBを更新するような作業を続けますか?Django - 応答を返してDBを更新します
これはパフォーマンス上の理由によるものです。ユーザーには非常に早い回答が得られますが、DBの更新には時間がかかります。
ありがとうございました。
あなたはenable-threads = true
でuwsgi使用している場合は、簡単な解決策は次のようになります。
import threading
def myview(request):
obj = MyObj()
threading.Thread(target=save_to_db, args=(obj,)).start()
return ...
def save_to_db(obj):
obj.save()
あなたは、すべてのユーザーの要求をこのように処理したい場合、これは、その後、何らかの時折バックグラウンドタスクには十分ですメッセージキューはよりスケーラブルなソリューションになります。
1つのスレッドが応答を返し、2番目が応答を返すようにマルチスレッド化できます。もう1つの方法は、メッセージサービス(セロリ+ redis/rabbitmqの行に沿って)にそれを渡して、それがそのタスクを処理できるようにすることです。
私が現在調査中のもの:django channels メッセージをキューに入れてDBを更新し、その間に応答を送信することができます。その後、別のワーカーがそのメッセージを受け取り、作業を行います。 しかし、django-channelsはあなたのメッセージが失われないことを保証しません(最大で1回届きます)... DBの更新が非常に重要な場合は、より信頼できるものを探したいかもしれません。
はまだこれをテストしたことはありません...ただの思考
号定期Djangoはその応答を返すと、データベースを更新するために、純粋なDjangoのソリューション、そのことはできませんを使用して、要求 - 応答経路をたどります。
要件に応じて、DjangoチャネルやDjango-Celeryなどのメッセージブローカーシステムを調べることをお勧めします。
私は理解していることを確認する:ビューは新しいスレッドを作成する必要がありますか? –