Celery&Flower文档笔记
1、Celery
# tasks.py
from celery import Celery
app = Celery('tasks', broker='redis://localhost:6379', backend='redis://localhost:6379/0')
@app.task
def add(a, b):
print(a + b)
创建实例
app是celery的一个实例,第一个参数表示app的名称,broker申明使用的broker是谁,这里用的是Redis。backend申明后端结果存储在哪里。
@app.task表示这是app的一个任务。
启动worker
接着启动worker。到目录下执行celery -A tasks worker --loglevel=info
。tasks为实例在哪个模块中,这里在tasks.py中,celery会自己去找实例,你也可以指定tasks.app。-loglevel 指定了日志级别,也可以用-l info表示。在Windows中,celery4以上在这样执行后续可能会报错,那么可以使用celery -A tasks worker -pool=solo -l info
打开worker。或者在tasks.py中加一句os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
。
如果要停止worker,使用control + c。
把任务给worker
在启动celery worker后,可以使用delay函数把任务给worker去异步执行。
from tasks import add
if __name__ == '__main__':
print("start add")
add.delay(1, 2)
print("end")
如果配置了backend,那么能接收delay的返回值result,使用result.ready()判断是否执行完毕。
配置
celery允许我们进行相关的配置,比如app.conf.task_serializer = 'json'
。如果需要同时配置多条,可以使用update进行配置。
目录结构:
proj/main.py
/config.py
/tasks.py
app.conf.update(
task_serializer='json',
accept_content=['json'], # Ignore other content
result_serializer='json',
timezone='Europe/Oslo',
enable_utc=True,
)
对于大型的工程,可以使用专门的配置模块进行配置,app.config_from_object('celeryconfig')
,celeryconfig为配置模块的名称,我们可以在同级目录下创建celeryconfig.py进行配置。
broker_url = 'pyamqp://'
result_backend = 'rpc://'
task_serializer = 'json'
result_serializer = 'json'
accept_content = ['json']
timezone = 'Europe/Oslo'
enable_utc = True
全部代码:
# main.py
from tasks import add
if __name__ == '__main__':
print("start add")
add.delay(1, 2)
print("end")
# tasks.py
from celery import Celery
import os
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
app = Celery('tasks')
app.config_from_object('config')
@app.task
def add(a, b):
print(a + b)
# config.py
broker_url='redis://localhost:6379'
result_backend='redis://localhost:6379'
关于PENDING队列:
Retrieve list of tasks in a queue in Celery
Message Protocol
监控celery
使用events得到事件发生的信息,从而进行监控。
Monitoring and Management Guide
from celery import Celery
def my_monitor(app):
state = app.events.State()
def announce_failed_tasks(event):
state.event(event)
# task name is sent only with -received event, and state
# will keep track of this for us.
task = state.tasks.get(event['uuid'])
print('TASK FAILED: %s[%s] %s' % (
task.name, task.uuid, task.info(),))
with app.connection() as connection:
recv = app.events.Receiver(connection, handlers={
'task-failed': announce_failed_tasks,
'*': state.event,
})
recv.capture(limit=None, timeout=None, wakeup=True)
if __name__ == '__main__':
app = Celery(broker='amqp://guest@localhost//')
my_monitor(app)
2、Flower事件实时监控工具
打开本地监听:flower --port=5555
或者从Celery运行:celery flower --address=127.0.0.1 --port=5555
如果要开放给外网:celery flower --address=0.0.0.0 --port=5555
。
可以在后面加上--basic_auth=name:password
用来进行简单的登录验证。
打开后进入127.0.0.1:5555进入flower界面。
然后我们使用celery就能在flower页面看到监控记录了。
flower提供了HTTP API,可以通过此对worker进行远程操控。
API Reference
Configuration and defaults
Celery&Flower文档笔记的更多相关文章
- ABP文档笔记系列
ABP文档笔记 - 模块系统 及 配置中心 ABP文档笔记 - 事件BUS ABP文档笔记 - 数据过滤 ABP文档笔记 - 规约 ABP文档笔记 - 配置.设置.版本.功能.权限 ABP文档笔记 - ...
- 转一篇:文档笔记之Django QuerySet
这个放着,说不定以后作一些更深入的查询时,用得着的. http://www.rapospectre.com/blog/7/ 今天刚刚答完辩体完检就跑来更新博客了!!! 先补上第一篇: 一般情况下,我们 ...
- ABP文档笔记 - 通知
基础概念 两种通知发送方式 直接发送给目标用户 用户订阅某类通知,发送这类通知时直接分发给它们. 两种通知类型 一般通知:任意的通知类型 "如果一个用户发送一个好友请求,那么通知我" ...
- ABP文档笔记 - 数据过滤
预定义的过滤 ISoftDelete 软删除过滤用来在查询数据库时,自动过滤(从结果中抽取)已删除的实体.如果一个实体可以被软删除,它必须实现ISoftDelete接口,该接口只定义了一个IsDele ...
- ABP文档笔记 - 事件BUS
文档: ABP框架 - 领域事件(EventBus) EventBus & Domain Events ABP源码分析二十五:EventBus EventBus(事件总线) EventBus是 ...
- asp.net mvc5中使用Swagger 自动生成WebApi文档笔记
Swagger可以自动生成Api说明文档,并内置在线测试,通过NSwagStudio还可以自动生成Api客户端调用代码,以下为具体实现步骤 1.写一个简单的WebApi并加上注释 public cla ...
- TProfiler部署文档--笔记
TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对象创建热点 线程状态分析等数据,为查找系统性能瓶颈提供数据支持. ...
- ABP文档笔记 - 配置、设置、版本、功能、权限
配置 全局仅一个单例,保存一组配置信息,一般直接在模块的预启动事件中赋值or修改.没有Scope划分,无论租户还是房东亦或者用户读取的值都不会有差异.每个模块都可以扩展这个配置. 设置 它没有层级关系 ...
- ABP文档笔记 - 规约
ABP框架 - 规约 简介 规约模式是一个特别的软件设计模式,业务逻辑可以使用boolean逻辑重新链接业务逻辑(维基百科). 实践中的大部分情况,它是为实体或其它业务对象,定义可复用的过滤器. 理解 ...
随机推荐
- 宝塔的url计划任务
to通过url访问 就像访问你的网站一样 然后控制器/方法里面写你要做的操作 就可以了 ,简单的一批
- DockerFile关键字相关作用以及解释
Dockerfile 关键字 作用 备注 FROM 指定父镜像 指定dockerfile基于那个image构建 MAINTAINER 作者信息 用来标明这个dockerfile谁写的 LABEL 标签 ...
- (Mysql)连接问题之1130
访问远程服务器上的Mysql数据库连接是报:1130-host is not allowed to connect this MYSQL severe; 解决方案: 登录远程服务器下的mysql下. ...
- mysql查询数据库中是否存在某个字段
select table_name from information_schema.columns where table_schema = '库名' and column_name='字段名';
- 关闭(隐藏)VS2019控制台上文件路径的显示
昨天有个朋友问我,怎么关闭在运行程序后,控制台上显示的文件路径啊?啥??我突然不知道他说的说什么,然后我就自己随便打了几行运行了一下,才知道原来他说的是这个: 一开始我也没在意,我就告诉他,这个无所谓 ...
- 基于粒子群算法的分组背包MATLAB实现
抽空看了一段时间的粒子群算法,这里仅针对其应用于动态规划中的背包问题的情况做下总结归纳,其他应用可以之后想到了再添加. 一:分组背包问题简介 假设有3个组,每组有2个物品,每种物品有3种属性,价值.体 ...
- QT之——QTableWidget拖拽单元格并替换内容(进阶)
所需待重写函数: [virtual] bool QObject::eventFilter(QObject *watched, QEvent *event); /* * Filters events i ...
- Language Guide (proto3) | proto3 语言指南(十二)定义服务
Defining Services - 定义服务 如果要在RPC(Remote Procedure Call,远程过程调用)系统中使用消息类型,可以在.proto文件中定义RPC服务接口,协议缓冲区编 ...
- docker镜像加速,docker更换为国内镜像
docker镜像加速,docker更换为国内镜像 一.使用官方镜像 二.Docker守护进程配置加速器 相关博文原文地址: CSDN:让我思考一下 :docker更换为国内镜像 一.使用官方镜像 Do ...
- debian 屌丝日记
好几年前,刚开始学习linux时,写的笔记,现在看来还挺有意思的,发出来 纪念下 1.安装debian系统,只安装最基本系统 不要桌面,不要print server,具体不会看网上图文并茂的 1) ...