序
最近使用celery对项目进行改造,使用异步任务来发送通知,使用定时任务来处理过期文件,下面就主要记录在Django中使用Celery的要点
安装与配置
- 安装
pip install django-celery
-
配置
- 进行broker等配置:
import djcelery djcelery.setup_loader() BROKER_URL = 'django://' #当使用redis作为后端时'redis://localhost:6379/0' CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler' #定时任务存储地址
- 添加至app并生成数据表:
INSTALLED_APPS = ( ... 'djcelery', 'kombu.transport.django', ... )
创建任务
-
创建异步项目:名字放在tasks.py文件夹下
from celery import task @task() def add(x, y): return x + y
-
settings.py中的djcelery.setup_loader()运行时, Celery便会查看所有INSTALLED_APPS中app目录中的tasks.py文件, 找到标记为task的function, 并将它们注册为celery task
-
调用命令:
import myapp.tasks.add add.delay(2, 2)
执行任务
-
python manage.py celery worker –loglevel=info
-
执行定时任务时需要加上心跳python manage.py celery beat
-
python manage.py celery worker -B(启动woker时自动启动beat)
结果返回
result = add.delay(2, 2)
if result.ready():
print "Task has run"
if result.successful():
print "Result was: %s" % result.result
else:
if isinstance(result.result, Exception):
print "Task failed due to raising an exception"
raise result.result
else:
print "Task failed without raising exception"
注意
- 有时会遇到解决root用户无法启动celery的问题,需要在代码中加入platforms.C_FORCE_ROOT = True