2017-06-21 16 views
1

私はceleryモジュールを初めて使用しているので、特定の関数の実行後に1つのタスクを実行したい。 tasks.pyを作成1つの関数を正常に実行した後に別のタスクを実行する

import djcelery 
djcelery.setup_loader() 
BROKER_URL = 'amqp://rahul:[email protected]:5672//' 
CELERY_ACCEPT_CONTENT = ['json'] 
CELERY_TASK_SERIALIZER = 'json' 
CELERY_RESULT_SERIALIZER = 'json' 
CELERY_IMPORTS = ('projectmanagement.tasks',) 

変更settings.py

は、私は私のDjangoのアプリで以下の変更を行っている

from celery import task 
    @task() 
    def add(x, y): 
     print (x+y) 
     return x + y 

マイview.py

class Multiply(APIView): 
    def get(self,request): 
     x = request.GET['x'] 
     y = request.GET['y'] 
     try: 
      z= x*y 
      data = {'success':True,'msg':'x and y multiply','result':z} 
      return HttpResponse(json.dumps(data),content_type="application/json") 
     except Exception,e: 
      print str(e) 
      data = {'success':False,'msg':'Error in multiplying x and y'} 
      return HttpResponse(json.dumps(data),content_type="application/json") 

今、multiplyメソッドが正常に実行された後に、セロリのタスクを呼び出すようにします。

APIの応答がセロリタスクの実行と独立するように、私は自分のビュー関数で自分のタスクを呼び出す必要がありますか?

+0

私は疑問に思っていましたが、私の答えは役に立ちましたか? –

答えて

2

あなたは以下の実行図になり、コール非同期、作るために.apply_asyncであなたのタスクを呼び出すことができます:あなたのコードでは、あなたのようにあなたのaddメソッドを呼び出す必要があり、前述の由来

       | 
           | 
          normal flow 
           | 
           |   async 
         my_task.apply_async -------> do my task_stuff 
           |   call 
           | 
          flow continues 
       without waiting on my_task execution 
           | 
           ... 

を次のようになります:

from path.to.your.tasks import add 

class Multiply(APIView): 
    def get(self,request): 
     x = request.GET['x'] 
     y = request.GET['y'] 
     try: 
      z= x*y 
      add.apply_async(x, y) # will execute independently 
      data = {'success':True,'msg':'x and y multiply','result':z} 
      return HttpResponse(json.dumps(data),content_type="application/json") 
     except Exception,e: 
      print str(e) 
      data = {'success':False,'msg':'Error in multiplying x and y'} 
      return HttpResponse(json.dumps(data),content_type="application/json") 
関連する問題