djangoアプリケーションでは、私は非同期タスクを実行しており、進行状況やエラーなどをユーザーに表示したいと考えています。エラーが発生した場合は、問題を解決するために追加の入力や何らかのアクションが必要なページにリダイレクトする必要があります。セロリの仕事からフロントエンドに伝える最良の方法は何ですか?Djangoのセロリの従業員がリアルタイムのステータスと結果メッセージをフロントエンドに送信する
ここで擬似コードでの基本的な構造です:私は、理想的にしたいと思う何
# views.py
from tasks import run_task
def view_task():
run_task.delay()
return render(request, 'template.html')
# tasks.py
from compute_module import compute_fct
@shared_task
def run_task():
result = compute_fct()
# how to catch status update messages from compute_module while compute_fct is running??
if result == 'error':
handle_error()
else:
handle_succes()
# compute_module
import pandas as pd
def compute_fct():
# send message: status = loading file
df = pd.read_csv('test.csv')
# send message: status = computing
val = df['col'].mean()
if val is None:
return {'status':'error'}
else:
return {'status':'success','val':val}
:
compute_module.py
モジュールは、Pythonネイティブロガーを使用しています。任務の分離によって、できるだけジェネリックとしてロギングを維持し、標準のpython/djangoロガーを使用したいと思います。しかし彼らはフロントエンドにメッセージを送るようには設計されていないようです。- セロリのタスクは、何らかの形でログを処理し、標準出力の代わりにそれらを表示する
- フロントエンドjsのショーをプッシャするためにそれらをリダイレクトし、セロリの労働者とフロントの間の通信の標準的な方法があるかもしれませんメッセージ
を扱います私が気づいていない終わり。このシナリオは頻繁に起こらなければならず、実装が非常に難しいと私は驚いています。つまり、rabbitmqメッセージキューまたはaws snsはこのために設計されていなければなりません。私が見たリソースはどちらかというとうまく動作しないと感じていませんが、ちょうど混乱しているかもしれません。
ログ:これはユーザー
- http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging
- https://docs.djangoproject.com/en/2.0/topics/logging/
- http://oddbird.net/2017/04/17/async-notifications/
- https://www.google.com/search?q=celery+worker+send+message+to+front+end
セロリカムにメッセージを送信しない、サーバ側でのロギングの詳細のようです管理者の監視タスクに関するもので、センではないようですユーザーへの鼎メッセージが
プッシャー私は好きですが、私はそれでcompute_module.py
の契約を持っている必要はありません。つまり、私はcompute_module.py
の中にpusher.comの統合をしたくないと思う。モジュールはちょうど私が私が「唯一の方法
- https://blog.pusher.com/improve-user-experience-app-real-time-progress-bar-tutorial/
- https://blog.pusher.com/django-pusherable/
ているのですか?あなたがタスクを実行する、それは完了したか、エラーです。サブタスクとして分解されたタスクを実行した場合、Webワーカーを使用して各サブの最終出力をクライアントに戻すことができますか?私も実際に感じていない*ユーザーのフィードバックメカニズムとしてのPythonのロギング - 私は素晴らしい*出力を得ると思われます.HTMLのためのespは価値があるよりも面倒です。 –