目录

  • 简介
  • 核心
  • 功能
  • Celery配置项
  • web框架集成
  • 安装
  • broker
    • rabbitmq
  • 在包中使用Celery
  • celery定时任务
  • 后台启动worker进程

简介

celery是基于python的分布式任务队列,一款简单、灵活、可靠的分布式系统。可以在一台机器上运行,也可以在多台机器上运行。
任务队列一般用于线程或计算机之间分配工作的一种机制。

核心

  1. task, 耗时的任务、定时任务
  2. broker, 消息中间件,如redis/rabbitmq
  3. worker, 执行者,并发执行(eventlet,gevent)
  4. backend, 存储任务的结果,如redis/memcached/Django ORM;
    默认禁用,如果不需要结果则禁用;局部禁用 结果
@app.task(ignore_result=True)
def task():return 5
  1. beat, 定时任务的调度器

功能

  1. 监控集群状态
  2. 任务调度
  3. 内存泄漏保护

Celery配置项

app = Celery("myworker")
# 消息队列
app.conf.broker_url = ""
# 结果后台
app.conf.result_backend = ""
# 时区
app.conf.timezone = "Asia/Shanghai"# 保存结果过期 s
app.conf.result_expires = 200

web框架集成

flask,
django,

安装

pip install celery==4.4.7# 同时安装依赖
pip install 'celery[gevent]'
pip install 'celery[redis]'

broker

rabbitmq

生产环境中的首先

# 只需简单配置
broker_url = 'amqp://myuser:mypassword@localhost:5672/myvhost'

rabbitmq官网

Ubuntu安装:

$ sudo apt-get install rabbitmq-server

docker运行:

$ docker run -d -p 5462:5462 rabbitmq

https://www.celerycn.io/ru-men/celery-chu-ci-shi-yong

在包中使用Celery

python3中优先绝对路径导入,然后相对路径

  1. 目录结构
  2. 代码
    celery.py
"""基础设置
"""
from celery import Celery# 实例化
app = Celery("my_worker", # worker名称broker="redis://:laufing@127.0.0.1:6379/5", # 消息队列backend="redis://:laufing@127.0.0.1:6379/6", # 结果后端,默认禁用include=["pkg.tasks"], # celery启动时,需导入的模块)# 更新配置
app.conf.update(result_expires = 3600, # 结果过期时间
)if __name__ == "__main__":app.start()

tasks.py

"""创建任务函数
"""
from .celery import app# 创建任务函数
@app.task
def task1():print("简单打印结果。。。")return 5@app.task(ignore_result=True) # 当前任务禁用结果
def task2():print("局部禁用结果")return 10

启动worker进程

# windows  使用eventlet、gevent单线程的高并发---协程
celery -A pkg worker -l info -P eventlet  -n laufing
# -A 应用
# -l log级别
# -P 并发形式
# -n 主机名 , 一台主机一个名字,起一个worker进程# linux  默认prefork 进程池
celery -A pkg worker -l info


查看worker正在处理的任务:

#  检查集群中所有的worker正在执行的任务
celery -A pkg inspect active# 监视 指定某些worker 正在执行的任务
celery -A pkg inspect active --destination=celery@tom.com, # 监控worker及执行的任务
celery -A pkg control enable_events
# 查看worker执行状况
celery -A pkg events --dump
# 禁用事件
celery -A pkg control disable_events# 查看集群中的worker列表
celery -A pkg status

celery定时任务

  1. 配置 定时任务调度器
# celery.py 内部# 定时任务调度器
beat_shedule = {"task1":{"task": "pkg.tasks.func1", # 任务函数"schedule": crontab(minute="*/1"), # 每1分钟执行一次,将任务提交到任务队列"args": (), # 任务函数的参数},"task2": {},"task3": {},
}# 更新配置
app.conf.update(beat_schedule = beat_schedule
)
  1. 启动 定时任务调度器
# 启动, 会定时提交任务到异步队列
celery -A pkg beat -l info# 启动worker进程
celery -A pkg worker -l info -P eventlet -n laufing
  1. 定时任务遇到的问题
  2. 解决方案
    删除之前启动定时任务的相关文件

以上可以直接在Django中使用Celery的定时任务

后台启动worker进程

linux下:, 注意window平台不支持

# 后台启动 multi start
celery -A pkg multi start my_worker -l info # 后台 重启  multi restart
# 后台 异步停止  multi stop
# 后台同步停止  multi stopwait


后台启动的worker, 没有执行任务

刨析django----celery相关推荐

  1. 刨析django----Nginx反向代理与负载均衡

    目录结构 Nginx是什么 正向代理与反向代理 Nginx的安装 window安装 linux安装 配置反向代理 Ubuntu1804下遇到的问题 Nginx反向代理案例 Ubuntu1804 配置N ...

  2. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析

    FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析 怎么查找就绪任务中优先级最高的? tasks.c中声明了一个全局变量 uxTopReadyPriority,任务从其他状态进入就绪 ...

  3. spring源码刨析总结

    spring源码刨析笔记 1.概述 spring就是 spring Framework Ioc Inversion of Control(控制反转/反转控制) DI Dependancy Inject ...

  4. springMvc源码刨析笔记

    springMvc源码刨析笔记 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller) 的缩写, 是⼀种⽤于设计创建 We ...

  5. zookeeper笔记+源码刨析

    会不断更新!冲冲冲!跳转连接 https://blog.csdn.net/qq_35349982/category_10317485.html zookeeper 1.介绍 Zookeeper 分布式 ...

  6. MapReduce源码刨析

    MapReduce编程刨析: Map map函数是对一些独立元素组成的概念列表(如单词计数中每行数据形成的列表)的每一个元素进行指定的操作(如把每行数据拆分成不同单词,并把每个单词计数为1),用户可以 ...

  7. 神经元细胞结构刨析(持续更新)

    神经元细胞结构刨析 一.简要功能组件 二. 神经元内部的成分分析 细胞核 轴突 树突 突触 线粒体 内质网 其他 三.神经元信号分类 电信号 化学信号 四.神经胶质 星形胶质细胞 少突胶质细胞 五.神 ...

  8. 2022网易最新版本将军令算法刨析(2)

    大家好,我是任雪飘!今天我们接着昨天的刨析,将一下so层的实现! 准备工作 一台安卓手机 ida 工具地址: 点击直达 提取码:w28g 网易将军令5.1.1 apk地址: 点击直达 提取码:e5wa ...

  9. 某易—将军令动态刨析算法(1)

    某易-将军令动态刨析算法(1) 我是任雪飘,一个技术渣渣,可以加我星球一起交流! 我们刷新一下,得到的就是30秒会更新一次,这里我们开始进行方法刨析. 开始记录方法调用过程 点击刷新动态码后关闭记录* ...

  10. C++异常处理机制由浅入深, 以及函数调用汇编过程底层刨析. C++11智能指针底层模拟实现

    一. 异常 1.1.异常的编程模型和基本使用 咱得用一用, 解释一下上述的模型    double Div(int a, int b) {if (b == 0) throw "Zero Di ...

最新文章

  1. 计算机应用基础网络统考操作,全国网络统考《计算机应用基础》完整最新题库及答案[整理].pdf...
  2. Android面试知识点(转)
  3. 写给 Web 开发者的深度学习教程 - 向量化 矩阵
  4. 为什么运行了java文件老是404_java – 为什么Spring MVC用404响应并报告“在...
  5. 链路追踪在ERP系统中的应用实践
  6. 最优化理论与算法笔记
  7. 从数据类型 nvarchar 转换为 numeric 时出错_JS入门篇(三):javascript的数据类型详解...
  8. php 反射 调用私有方法,PHP通过反射方法调用执行类中的私有方法
  9. 机器视觉:偏振镜光学原理和在机器视觉中的应用
  10. 最新:2021年度泰晤士世界大学学科排名公布
  11. 如何修改SAO用户密码
  12. windows环境下,搭建RTSP视频推流服务器
  13. 联想电脑进入BIOS曾经走过的“坑”
  14. 人体十二经络的走向动态图,人手一份!
  15. SMTP 发送邮件错误码和解决方法
  16. WORD转PDF格式快捷方法(转贴)
  17. 将uni-app项目编译为H5网站
  18. xcpc近年铜牌题补题路
  19. Endnote导入知网、EI、IEEE数据库文献
  20. 教你怎样维持异地恋!

热门文章

  1. 楚汉诸侯战天下隐私政策
  2. 玩游戏计算机缺失msvcp140,Win10系统玩吃鸡提示游戏缺少msvcp140.dll的解决方法
  3. linux多线程——基础知识+实现
  4. SSO-单点登录(1)
  5. 信号完整性专题【3】——有哪些功能和方案专攻高速设计布局布线?【转载】
  6. 12V输出4.2V1A电池充电芯片
  7. Vector CAN Log报文收发分析工具VN1640/VN1630替代款工具--CANBOX
  8. iPad和iPhone各机型屏幕长宽和长宽比
  9. Xcode写Python
  10. 如何下载FLASH里面的歌曲(保证管用)