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日志
- python:在Django项目中使用Celery实现定时任务--简单版
- Django中使用Celery实现定时任务(用djcelery)
- 异步任务利器Celery(二)在django项目中使用Celery
- 【Python】django-celery执行定时任务
- django-celery定时任务
- django+celery+redis实现运行定时任务
- Django 使用 Celery 实现异步任务
- django使用celery定时任务,使用redis和supervisor。
- django —— Celery实现异步和定时任务
- Django的app中使用Celery的Crontab定时执行任务
- Django笔记 使用Celery来进行定时Batch任务
- 在tornado中使用celery实现异步任务处理之一
- django-celery简单使用
- Django中如何使用django-celery完成异步任务
- Django中如何使用django-celery完成异步任务 (1)
- Django中如何使用django-celery完成异步任务 (2)
- Django中如何使用django-celery完成异步任务 (2)
- Django中使用django-celery完成异步任务(1)
- 打字
- iOS开发-隐藏系统状态栏 让app启动时图片全屏 进入程序后显示状态栏方法。
- 民营医院负面信息处理【优化】
- Mysql主从架构的复制原理及配置
- moveTaskToBack的参数
- python:在Django项目中使用Celery实现定时任务--简单版
- 杭电1000、1001C语言,通过。
- AndroidStudio插件GsonFormat
- TCP/IP协议攻击实验2
- RemoteViews之RemoteViews的内部机制
- linux tcp select 超时 自查文档
- Spring+quartz定时删除已过期未付款订单信息
- iOS 获取当前正在显示的ViewController
- eclipse修改android项目的package包名