Python+Django+celery+rabbitmq异步任务

目录

1.Docker安装Rabbitmq

2.安装celery,djcelery

3.安装django,配置 文件


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'})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值