美文网首页
django 中配置celery

django 中配置celery

作者: ___大鱼___ | 来源:发表于2019-07-05 10:26 被阅读0次
    在django中当我们想要执行某一个定时任务来定时刷新一些后台结果(redis、实时更新数据)等等, 应该怎么办呢?
    首先我们需要安装celerydjang_celery
    pip install celery
    pip install django-celery
    

    环境

    Python 3.6.6
    
    Django 2.0
    
    Celery 3.1.26.post2 (Cipater)
    
    然后我们需要有一个broker来接收和发送队列消息我用的是redis

    settings.py

    import djcelery
    
    djcelery.setup_loader()
    
    INSTALLED_APPS = [
              ...
              'djcelery'
    ]
    
    # celery settings
    # celery中间人 redis://redis服务所在的ip地址:端口/数据库号
    BROKER_URL = 'redis://:199199@localhost:6379/0'
    # celery结果返回,可用于跟踪结果
    CELERY_RESULT_BACKEND = 'redis://:199199@localhost:6379/0'
    CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
    # celery时区设置,使用settings中TIME_ZONE同样的时区
    CELERY_TIMEZONE = TIME_ZONE
    
    blog/blog/新建一个文件celery.py`
    import os
    from celery import Celery
    
    from django.conf import settings
    from celery import shared_task
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MediaApp.settings')
    
    # Celery的参数是你当前项目的名称
    app = Celery('MediaApp')
    
    # 这一步让你可以在django的settings.py中配置celery
    app.config_from_object('django.conf:settings')
    
    # celery会自动在你注册的app中寻找tasks.py,所以你的tasks.py必须放在各个app的目录下并且不能随意命名
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
    @shared_task
    def test():
        print('------')
    

    blog/init.py

    from .celery import app as celery_app
    
    __all__ = ('celery_app', )
    
    # 这一步会确保当Django项目运行时这个app总是被导入
    
    然后执行 python manage.py migrate 同步数据库
    往后可以自行定义定时任务 如果还不懂的话请参考我的个人博客

    ZHIJINYU

    相关文章

      网友评论

          本文标题:django 中配置celery

          本文链接:https://www.haomeiwen.com/subject/btkshctx.html