アプリケーションには django-celery を使用します。私たちが従うワークフローについて疑問があります。
現在、ユーザーがリンクをクリックすると、次のコードを使用してタスクがキューに入れられます
result=retrieveDatausingWorker.apply_async(args=[type,dictParamList])
次に、ビューはユーザーに待機メッセージを表示するページを返します。このページは現在のタスクの task_id も返します次に、タスク ID をサーバーに送信する ajax 呼び出しを使用して、現在キューに入れられているタスクのステータスを確認しています。
コード
def getDocketDownloaderWorkerStatus(request):
if request.method=="POST":
task_id=request.POST.get('task_id')
result = AsyncResult(task_id)
if result:
state, retval = result.state, result.result
response_data = dict(id=task_id, status=state, result=safe_str(retval))
if (state=='SUCCESS' or state=='FAILURE') and ('task_id' in request.session):
del request.session['task_id']
return HttpResponse(serialize(response_data), mimetype="application/json")
この ajax 関数は、サーバーが結果とともに status=='SUCCESS' を返すまで、5 秒ごとに呼び出されます。
これは正しい方法ですか?それとも使用料が高いのですかresult = AsyncResult(task_id)
データベースをブローカーとして使用しています。データベースはゼロラウンド クラウド データベースでホストされます。ワーカーを実行するたびに、CPU 使用率が 95% を超え、これに関する重大なエラー メッセージが表示されます。