2014-11-03 26 views
3

我有一個預定義的芹菜任務在我的代碼,說my_proj.tasks.my_celery_task芹菜 - 激活通過命令行任務或HTTP請求

我想通過命令行/ HTTP請求,以啓動任務(不通過我的應用程序)。

我搜索了文檔(鋸花和捲曲選項),但沒有一個真正的好例子來調用預定義的任務。如何實現這一目標?

回答

12

假設你已經用Rabbitmq安裝了芹菜,下面是一個簡單的例子。

定義任務:my_app.py

from celery import Celery 

app = Celery('tasks', backend='amqp', broker='amqp://') 

@app.task 
def add(x, y): 
    return x + y 

啓動工作:

celery worker -l info -A my_app 

開始花

flower -A my_app 

添加任務通過命令行來排隊

curl -X POST -d '{"args":[1,2]}' http://localhost:5555/api/task/async-apply/my_app.add 

或通過請求

import requests, json 
api_root = 'http://localhost:5555/api' 
task_api = '{}/task'.format(api_root) 
args = {'args': [1, 2]} 
url = '{}/async-apply/my_app.add'.format(task_api) 
print(url) 
resp = requests.post(url, data=json.dumps(args)) 
reply = resp.json() 
reply 
+0

謝謝!我正在嘗試,但它不會返回(就像它是堆棧)。無論如何設置超時檢查爲什麼它是堆棧?我正在使用CURL選項。 – Lin 2014-11-03 09:08:43

+0

您可以設置超時。一個簡單的例子來設置它在這裏http://nbviewer.ipython.org/github/mher/flower/blob/master/docs/api.ipynb – ChillarAnand 2014-11-03 09:18:19