真正的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
定义了一个简单的两数相加任务。
在当前目录或使用绝对路径下执行命令
celery -A tasks worker -l info ### -l info表示loglevel等级为info级,也可以设为debug级
该命令会将tasks任务注册进broker服务中,等待分发任务。如下图:
3.png
然后在新建的命令行标签中执行python命令:
>>> from tasks import add
>>> add(2,5)
打印结果为7.傻瓜都知道。回过头来看worker日志,毫无反应,妈比,搞什么鬼!哦,原来真正的使用worker应使用以下命令:
add.delay(2,5)
便可以看到:
4.png
二.独立Celery的配置
上面的例子我们将Celery的配置和任务都写在一个python文件中,这在多模块任务中是很不可取的,接下来我们将Celery的配置独立于一个文件。
新建一个python包myTasks
,内置文件如下:
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的结合