目录
1.Docker安装Rabbitmq
# 创建rabbitmq容器
docker run -d --name=rabbitmq -p 10:15672 -p 11:5672 --restart unless-stopped -v /rabbitmq:/root rabbitmq:latest
# 进入容器
docker exec -it rabbitmq bash
# 配置rqbbitmq
rabbitmq-plugins enable rabbitmq_management
# 退出容器
# 浏览器打开rabbitmq网页(对应端口15672)
# 默认密码账号都是guest
2.安装celery,djcelery
pip install celery
pip install djcelery
3.安装django,配置 文件
1.setting文件中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
'djcelery',# 注册djcelery
]
# 设置mq为消息队列
import djcelery
# 初始化加载
djcelery.setup_loader()
# 设置代理人broker(5672为服务连接端口,15672为浏览器页面连接端口)
BROKER_URL = 'amqp://guest:guest@xx.xx.xx.xx:5672'
# 设置结果存储位置
CELERY_RESULT_BACKEND = 'amqp://guest:guest@xx.xx.xx.xx:5672'
# 可以配置定时任务(需要的话)
CELERYBEAT_SCHEDULE = {
# 定时任务一: 每24小时周期执行任务(test)
u'定时任务1': {
"task": "app.tasks.test",
"schedule": crontab(hour='*/24'),
"args": (),
},
# 定时任务二: 每天的凌晨12:30分,执行任务(test)
u'定时任务2': {
'task': 'app.tasks.test',
'schedule': crontab(minute=30, hour=0),
"args": ()
},
# 定时任务三:每个月的1号的6:00启动,执行任务(test)
u'定时任务3': {
'task': 'app.tasks.test',
'schedule': crontab(hour=6, minute=0, day_of_month='1'),
"args": ()
},
}
2.需要写异步任务的app文件下,和views.py同级新建tasks.py(必须这个名字和位置)
# coding : utf-8
from time import sleep
from celery import task
from celery import Celery, platforms
platforms.C_FORCE_ROOT = True
global server
@task
def test(num, **kwargs):
# 这里写耗时任务
sleep(3)
print('这是消费的第%s个任务' % num)
3.在views.py里面调用异步任务(相当于将耗时任务塞进rabbitmq消息队列)
from user.tasks import test
Num = 0
class Test(APIView):
authentication_classes = []
def get(self, request, *args, **kwargs):
job_name = 'test1'
global Num
Num += 1
# 生成异步任务
res = test.delay(Num)
print(res, '这是生产的第%s个任务' % Num)
eta = datetime.utcnow() + timedelta(seconds=10)
# 生成异步延时任务
res1 = test.apply_async((job_name,), eta=eta)
print(res1, '这是生产的第%s个延时任务' % Num)
# 定时任务写在setting里面即可
return Response({'code': 0, 'msg': 'success'})