2

アプリケーションには 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% を超え、これに関する重大なエラー メッセージが表示されます。

4

1 に答える 1

2

正しいチェック方法を使用していますが、データベースをブローカーとして使用することは実際にはお勧めできません。

Redis または RabbitMQ に切り替えることをお勧めします (RabbitMQ はおそらくあなたのケースではやり過ぎです)。これにより、CPUの使用量が大幅に削減されるはずです。

于 2012-09-03T09:26:02.490 に答える