python:在Django项目中使用Celery实现定时任务--简单版

来源:互联网 发布:nginx 点播 编辑:程序博客网 时间:2024/06/06 02:04

背景

在最近的一个开发项目中,基于django,但需要后台定时去相应的接口抓取数据并存放到mysql中


Celery简介

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。

它是一个专注于实时处理的任务队列,同时也支持任务调度。

Celery 有广泛、多样的用户与贡献者社区,你可以通过 IRC或是 邮件列表 加入我们。

Celery 是开源的,使用 BSD 许可证 授权。


开始

1. 安装celery

    pip install celery

2. 使用redis方案

    yum install redis python-redis

    service redis start

3. 配置django

project/setting.py

# django celery<span style="color:#FF0000;">import djcelerydjcelery.setup_loader()BROKER_URL = 'redis://127.0.0.1:6379/0'CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/1'CELERY_ENABLE_UTC = FalseCELERY_TIMEZONE = 'Asia/Shanghai'CELERY_TASK_RESULT_EXPIRES = 10CELERYD_LOG_FILE = BASE_DIR + "/logs/celery/celery.log"CELERYBEAT_LOG_FILE = BASE_DIR + "/logs/celery/beat.log"CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']</span># Application definitionINSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'gunicorn',    <span style="color:#FF0000;">'djcelery'</span>,    'xxxx',]

4. 新建tasks.py文件

该文件是写任务的文件

from celery import Celeryimport redisimport timebroker = 'redis://127.0.0.1:6379/0'app = Celery('tasks', broker=broker)app.conf.update(    CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/1')
注意:上面代码中的app初始化分为两部分进行的,broker和BACKEND分开写,亲测必须这样分开才有效

            好多文章直接写成 app = Celery('tasks', broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/1')是没有效果的,任务永远无法结束

5. 新建任务

@app.taskdef add(x, y):    return x + y

6. 定时任务设置

a. 同步数据库

    python manager.py makemigrations

    python manager.py migrate

b. 启动django

    python manager.py runserver

c. 用浏览器打开127.0.0.1/admin     

   

    点击Crontabs后面的Add来添加一个定时器

   

    这里与linux的crontab类似, 上面的图中建立了一个每分钟的定时器

    然后回到主页上,点击Periodic tasks后面的Add来新建一个定时任务

   

     Name: 随便写一个

     Task(registered):选择前面新建的add任务

     Crontab:选择前面新建的crontab

7. 启动定时任务

    python manager.py celery worker -B -l info

    worker:启动celery broker

    -B: 启动celery beat,该进程在定时到达时会自动向broker中加一条任务

    -l info:启动celery日志

   


0 0
原创粉丝点击