真正的Celery
一.菜刀小試
新建一個py任務腳本文件取名為tasks.py,如下:
from celery import Celery
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def add(x, y):
return x + y
定義了一個簡單的兩數(shù)相加任務聚蝶。
在當前目錄或使用絕對路徑下執(zhí)行命令
celery -A tasks worker -l info ### -l info表示loglevel等級為info級氧苍,也可以設(shè)為debug級
該命令會將tasks任務注冊進broker服務中会通,等待分發(fā)任務氏义。如下圖:
然后在新建的命令行標簽中執(zhí)行python命令:
>>> from tasks import add
>>> add(2,5)
打印結(jié)果為7.傻瓜都知道勘高∩В回過頭來看worker日志苞也,毫無反應赂摆,媽比挟憔,搞什么鬼!哦烟号,原來真正的使用worker應使用以下命令:
add.delay(2,5)
便可以看到:
二.獨立Celery的配置
上面的例子我們將Celery的配置和任務都寫在一個python文件中绊谭,這在多模塊任務中是很不可取的,接下來我們將Celery的配置獨立于一個文件汪拥。
新建一個python包myTasks
达传,內(nèi)置文件如下:
myTasks
+---__init__.py
+---celery.py
+---config.py
+---tasks.py
celery.py
from __future__ import absolute_import
from celery import Celery
app = Celery('myTasks', include=['myTasks.tasks'])
app.config_from_object('myTasks.config')
config.py
from __future__ import absolute_import
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
BROKER_URL = 'redis://127.0.0.1:6379/0'
tasks.py
from __future__ import absolute_import
from myTasks.celery import app
@app.task
def add(x, y):
return x + y
在myTasks的同級目錄中使用命令行:
$ celery -A myTasks worker -l info
然后便可在其他項目中使用布置好的任務。哈啊,太棒了宪赶!
下一篇:
用過才知道真的那么好系列(三)——Celery與Django的結(jié)合