第一步先安装celery
pip install django-celery
第二步安装rabbitmq
sudo apt-get install rabbitmq-server
添加用户
sudo rabbitmqctl add_user 用户名 密码
将上一步增加的用户设为管理员
sudo rabbitmqctl set_user_tags 上一步的用户名 administrator
添加虚拟环境
sudo rabbitmqctl add_vhost vhost
设置用户在虚拟环境下有全部权限
sudo rabbitmqctl set_permissions -p vhost 用户名 ".*" ".*" ".*"
启动rabbitmq
rabbitmqctl start_app
rabbitmq-plugins enable rabbitmq_management
http://localhost:15672 登录rabbitmq
在django中使用
在settings同级目录下创建celery.py
在__init__,py中文件写入
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
在celery.py文件中写入
# coding:utf8
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
# yourprojectname代表你工程的名字,在下面替换掉
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourprojectname.settings')
app = Celery('填写settings所在模块的目录名')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
settings文件配置
import djcelery
djcelery.setup_loader()
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_BROKER_URL= 'amqp://rabbitmq用户名:密码@localhost:5672/vhost'
INSTALLED_APPS = [
...
'djcelery',
]
在自定义的app下创建tasks.py
from __future__ import absolute_import
from celery import shared_task
@shared_task
def add(x, y):
print('test')
print('zzz')
return x + y
获取任务的返回值
res = add.delay(3, 4)
print(res.get())
运行celery-worker
python manage.py celery worker --loglevel=info