Django 中利用 celery 设置定时任务
发布网友
发布时间:2024-10-07 19:17
我来回答
共1个回答
热心网友
时间:2024-10-07 19:34
Celery 是一个高效的基于分布式消息传递的作业队列,主要通过消息传递任务,通常使用一个叫 Broker(中间人)来协调 client(任务的发出者)和 worker(任务的处理者)。clients 发出消息到队列中,broker 将队列中的信息派发给 Celery worker 来处理。Celery 本身不提供消息服务,它支持的消息服务 (Broker) 有 RabbitMQ 和 Redis。小编一般推荐 Redis,因为其在 Django 项目中还是首选的缓存后台。
Celery 架构由三个模块组成:消息中间件(message worker),任务执行单元(worker)和任务执行结果存储(task result store)组成。
redis 是一种运行速度很快,并发很强的跑在内存上的 NoSql 数据库,支持键到五种数据类型的映射。
1、下载并安装 redis
redis 默认安装路径:/usr/local/bin
2、redis 的配置
(1)将 redis 的配置文件拷贝到新建的目录 myredis-config 下。
(2)redis 默认不是后台启动,需要修改配置文件。
一旦启动成功就没有控制台输入了,即使是按 Ctril+C 服务会立即停止,这里需要采用守护进程的方式。
(3)关闭 redis 服务
或者 kill -9 PID 方式强制杀死进程。
(4)设置密码
3、redis manager 链接测试
(1)修改配置文件 /usr/local/bin/myredis-config/redis.conf
将 bind 127.0.0.1 改为 bind 0.0.0.0,将 protected-mode yes 改为 protected-mode no。若 Django 和 Redis 在同一台服务器,下面设置无需修改。
(2)iptables 对端口进行放行
此规则只做参考,本人实验环境中开启了 iptables ,不添加此规则无法连接 redis。
(3)运行 Redis 管理工具,默认情况下不用输入密码。
三、Celery 安装与配置
1、相关软件包安装
注:django-celery-results 建议指定版本号安装,新的版本 2.5.1 存在任务名称(task name) 不显示的情况,建议安装 2.2.0 版本。
2、新增文件
taskApp 目录下面新增了 "tasks.py",myproject 下面新增加了 "celery.py"。
涉及需要修改的文件为: taskApp 下的 "tasks.py",myproject 下面的 "__init__.py"、"celery.py"、"settings.py"。
3、settings.py 修改部分
4、__init__.py 配置修改
5、celery.py 配置修改
6、tasks.py 配置修改
5、数据库迁移
6、启动任务调度器 beat
(1)开启 redis 服务
(2)开启任务调度器
(3)开启 celery worker
(4)编写 shell 实现后台启动