Django配置celery定时任务

举报
时光不写 发表于 2022/02/22 19:16:33 2022/02/22
【摘要】 安装celery使用redis+celery的方式(使用的是阿里源,也可以选择不用)pip install -i https://mirrors.aliyun.com/pypi/simple/ -U "celery[redis]" 修改Django的settings配置文件添加celery文件在app同级目录下添加一个文件夹,例:service_celery在文件夹中添加celery.py...

安装celery

  • 使用redis+celery的方式(使用的是阿里源,也可以选择不用)
    pip install -i https://mirrors.aliyun.com/pypi/simple/ -U "celery[redis]"
    

修改Django的settings配置文件

  • 添加celery文件
    在app同级目录下添加一个文件夹,例:service_celery
    在文件夹中添加celery.py文件,内容如下:

    #!/usr/bin/env python
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    # set the default Django settings module for the 'celery' program.
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
    
    app = Celery('bank_service')
    
    # Using a string here means the worker doesn't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    #   should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # Load task modules from all registered Django app configs.
    app.autodiscover_tasks()
    
    @app.task(bind=True)
    def debug_task(self):
        print('Request: {0!r}'.format(self.request))
    
    
  • 配置settings文件,在settings.py中添加:

    # import djcelery
    # djcelery.setup_loader()
    
    CACHES = {
        "default": {
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/1",
            "OPTIONS": {
               "CLIENT_CLASS": "django_redis.client.DefaultClient",
            }
        }
    }
    
    REDIS_URL = CACHES['default']['LOCATION']
    CELERY_BROKER_URL = REDIS_URL
    BROKER_URL = REDIS_URL
    

使用celery任务

  • 创建异步任务
    在app同级目录下添加一个文件夹,例:service_tasks
    在文件夹中添加tasks.py文件,内容如下:

    from service_celery.celery import app
    import time
    @app.task(bind=True)
    def add_num(self, a, b):
        time.sleep(1)
        c = a+b
        print(c)
    
  • 调用异步任务

    from service_tasks.tasks import add_num
    a, b = 1, 2
    add_num.delay(a, b)
    print("success")
    

启动celery

  • 启动

    # ../venv_bank/bin/celery是我本地celery的路径,也可以直接使用celery
    # worker后的都是一些配置方面的,也可以去掉
    ../venv_bank/bin/celery -A bank_service worker --loglevel=info  --max-tasks-per-child 500 --autoscale=8,4
    

参考链接:Django配置celery定时任务

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。