一文搞懂Celery任务队列与Worker原理(Django环境)
Celery是一个分布式消息处理系统,核心是任务队列,支持异步与定时执行耗时操作。它依赖broker(如Redis)传递消息,worker进程负责执行任务。在Django中需创建celery py配置并自动发现任务,生产环境可用nohup后台启动worker。
一、 简介
Celery 是一个简单、灵活且足够可靠的分布式消息处理系统,核心是一个专注于实时处理的任务队列,同时也支持任务调度。说白了,它就是为了帮你把那些耗时的操作从主流程里抽出来,异步执行,或者定时执行。
安装也很简单,一行命令搞定:
pip install celery # 看看是否安装成功 pip freeze | grep -i 'celery'
二、名词解释
在真正上手之前,先理清几个关键角色:
- broker——消息传输的中间件。生产者一旦有消息发送,就会先放到 broker 里。常见的实现有 Redis、RabbitMQ。
- backend——用来存储任务执行的结果。如果你需要跟踪任务状态、查询返回值,就得配置 backend,比如 Redis 或 MySQL。
- worker——真正干活的人。它是一个进程,负责从 broker 里取出消息并执行对应的任务。
三、使用 Celery
写一个简单的 Celery 应用只需要几行代码:
from celery import Celery
app = Celery('kqlproject', broker='redis://:password@127.0.0.1:6379/1')
# 第一个参数是自定义的项目名称
# 定义任务函数
@app.task
def task_test():
print("task is running")
注意 broker 的地址要替换成你自己的 Redis 连接信息,密码可选。
四、启动 Worker
在终端里,进入 tasks.py 所在的目录,执行下面的命令来启动 worker:
# 前台启动,日志会直接输出到终端 celery -A tasks worker --loglevel=info
这时 worker 就处于监听状态,等着处理消息。
五、创建生产者——推送任务
在同一个目录下打开 Python 交互式环境(比如 ipython3),然后:
from tasks import task_test task_test.delay()
执行之后,回到 worker 的终端窗口,你就能看到 task is running 的日志输出。
六、存储执行结果
Celery 也支持把任务执行结果保存下来,方便后续查询。需要借助 Redis、MySQL 或 Memcached 等后端存储。配置方法很简单,在创建 Celery 实例时加上 backend 参数:
from celery import Celery
app = Celery(
'demo',
broker='redis://@127.0.0.1:6379/1',
backend='redis://@127.0.0.1:6379/2',
)
@app.task
def test_task(a, b):
print("task is running")
return a + b
这样任务执行完毕后,返回值就会存入指定的 Redis 数据库中。
七、Django 中使用 Celery
在 Django 项目里集成 Celery 也很规范,大致分四步走:
1. 在项目同名目录下创建 celery.py 配置文件。
2. 在各个应用下创建 tasks.py,集中定义要执行的 worker 函数。
3. 视图函数充当生产者,调用 delay() 推送任务。
4. 在项目根目录启动 worker。
启动命令示例:
celery -A 项目同名目录名 worker -l info
下面给出一个典型的 celery.py 配置:
# 在 settings 同级目录下新建 celery.py
from celery import Celery
from django.conf import settings
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'dadablog.settings')
app = Celery('dadablog')
app.conf.update(
BROKER_URL='redis://:@127.0.0.1:6379/1'
)
# 自动去注册的应用下寻找加载 worker 函数
app.autodiscover_tasks(settings.INSTALLED_APPS)
然后在每个应用下创建 tasks.py,比如发送信息的示例:
# 在某应用下的 tasks.py
from tools.sms import YunTongXin
from dadablog.celery import app
@app.task
def send_sms_c(phone, code):
config = {
"accountSid": "2c94811c***********",
"accountToken": "bd81141c************8",
"appId": "2c94811c88b*****************",
"templateId": "1"
}
yun = YunTongXin(**config)
res = yun.run(phone, code)
return res
启动 worker 后,当视图函数调用 send_sms_c.delay(phone, code) 时,worker 就会异步执行信息发送任务。

八、正式环境后台启动
生产环境不能让 worker 挂在前台,需要后台运行。推荐使用 nohup 配合协程模式:
nohup celery -A projectname worker -P gevent -c 1000 > celery.log 2>&1 & # 参数说明: # nohub —— 忽略所有挂断信号(SIGHUP) # projectname —— 项目配置目录名 # -P gevent —— 使用 Python 协程,这里开启 1000 个协程 # celery.log —— 日志输出文件(也可用绝对路径) # 2>&1 —— 将标准错误重定向到标准输出 # & —— 后台运行
这样即便终端关闭,worker 也能继续跑。
九、总结
Celery 的核心价值在于把耗时的任务从业务主流程中解耦出来,让系统响应更快、更稳定。从简单的单机任务到复杂的分布式调度,这套机制都能很好地胜任。希望这篇笔记能帮你快速上手,在实际项目中用好 Celery。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
FileZilla断点续传设置与操作指南
FileZilla支持断点续传,需客户端与服务器均开启REST命令。设置中确保启用断点续传及继续传输选项。中断后自动或手动从断点恢复。注意服务器支持、传输模式匹配及文件完整性校验。
Debian系统C++编译器位置查找方法
在Debian系统中,通过apt安装的C++编译器g++默认位于 usr bin g++,可使用which或whereis命令验证路径。g++属于build-essential软件包,若未安装则需执行sudoaptinstallbuild-essential。该包还包含gcc、make等编译工具链,g++是GNUC++编译器,实际是符号链接指向具体版本,验证
Debian系统安装C++环境的方法
在Debian系统安装C++开发环境:先sudoaptupdate更新包列表,再sudoaptinstallbuild-essential安装编译工具链,或单独安装g++。用g++--version验证。可选安装VSCode、GDB、CMake等工具并配置默认编译器版本。
Debian系统C++开发环境配置指南
在Debian系统中,先执行aptupdate更新软件包列表,再安装build-essential元包即可获得GCC、G++、Make和GDB。通过运行g++--version命令验证编译器安装成功。可选安装VisualStudioCode、CLion等编辑器及CMake构建工具,并编写一个简单的HelloWorld程序,使用g++编译运行以验证环境配置正确
通过cpustat工具查看CPU状态的具体方法与详细步骤
cpustat是sysstat包中的CPU监控工具,可按固定间隔输出带时间戳的CPU使用率统计。安装后运行cpustat即可实时显示各核心信息,常用指标包括%usr、%sys、%iowait、%steal和%idle,用于定位用户态、内核态或I O瓶颈。高级选项-c可显示单核统计,-m可同时查看内存使用,适合脚本采集和性能分析。
- 热门数据榜
相关攻略
2026-07-25 22:29
2026-07-25 22:29
2026-07-25 22:29
2026-07-25 22:29
2026-07-25 22:18
2026-07-25 22:18
2026-07-25 22:18
2026-07-25 22:18
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程

