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逻辑重新链接业务逻辑(维基百科). 实践中的大部分情况,它是为实体或其它业务对象,定义可复用的过滤器. 理解 ...
随机推荐
- openshift 3.11安装部署
openshift 3.11 安装部署 openshift安装部署 1 环境准备(所有节点) openshift 版本 v3.11 1.1 机器环境 ip cpu mem hostname OSsys ...
- 特征预处理之归一化&标准化
写在前面 这篇博客的主要内容 应用MinMaxScaler实现对特征数据进行归一化 应用StandardScaler实现对特征数据进行标准化 特征预处理 定义 通过一些转换函数将特征数据转换成更加 ...
- Linux的环境变量配置在/etc/profile或/etc/profile.d/*.sh文件中的区别是什么?
@ 目录 login shell non-login shell 它们的区别 Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bash ...
- 3、wait和waitpid
1. 函数介绍 wait函数:调用该函数使进程阻塞,直到任意一个子进程结束,或者该进程接收到了一个信号为止,如果该进程没有子进程或该进程的子进程已经结束,wait函数立即返回. waitpid函数:与 ...
- Flink可靠性的基石-checkpoint机制详细解析
Checkpoint介绍 checkpoint机制是Flink可靠性的基石,可以保证Flink集群在某个算子因为某些原因(如 异常退出)出现故障时,能够将整个应用流图的状态恢复到故障之前的某一状态,保 ...
- libevent源码学习之event
timer event libevent添加一个间隔1s持续触发的定时器如下: struct event_base *base = event_base_new(); struct event *ti ...
- MySQL 高性能优化规范建议
数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名 ...
- Box Model 盒子模型
Box Model盒子模型,是初学者在学习HTMl5时会学到的一个重要的模型,也有一些人称它为框模型,因为盒子是属于3维,而框是平面的.称之为盒子模型,是因为其结构和盒子十分相似,其最外面是margi ...
- Java 集合框架()
一概述 二Collection接口 List Set Queue 三Map接口 HashMap LinkedHashMap TreeMap 四其它集合类 Vector Stack HashTable ...
- mysql错误(Incorrect key file for table)
Incorrect key file for table 'C:\Windows\TEMP\#sql578_6e2_68d.MYI'; try to repair it mysql错误:mysql需要 ...