Celery入门
Celery是一个可以处理大量消息的分布式系统,是一个关注于实时进程的任务队列,同时也支持任务时间表。
Celery经由消息进行交流,经常使用一个broker在client和worker之间调解。初始化一个任务,client添加一个消息到队列中,broker将消息传递给worker。
选择Broker
Broker:消息枢纽
常用的有两种:
- RabbitMQ
- Redis
(他们的安装与配置可以查看相应的文档)
安装Celery
pip install celery
第一个应用
# tasks.py from celery import Celery # celery在使用前必须要实例化,实例化后被称为应用(app) app = Celery('tasks',broker='amqp://guest@localhost//') """ 第一个参数用来命名当前的应用模块 第二个参数是Broker的URL地址 rabbitmq地址:amqp://user_name:password@ip/host redis地址:redis://user_name:password@ip/host """ @app.task def add(x,y): return x+y
运行该应用模块的服务
celery -A tasks woker --loglevel=INFO # 使用celery --help 可以查看帮助 # 使用celery worker --help 也可以 # 使用Ctrl+c就可以停止worker
tasks 就是worker要拿到任务的任务板标志,只有有个这个标志,worker才知道到底谁在发任务
这个tasks与实例化Celery的app对象对应
调用任务
可以使用delay()方法调用任务,它是apply_async()方法的快捷方式,不支持操作选项
from tasks import add add.delay(4,4)
保存结果
若想跟踪任务的状态,Celery需要存储和发送状态到某处。比如:SQLAlchemy/Django ORM, MongoDB, Memcached, Redis, RPC (RabbitMQ)
在初始化的时候改成
app = Celery('tasks',backend='rpc://',broker='ampq://') # 存储在rabbitMQ # app = Celery('tasks',backend='redis://',broker='ampq://') # 存储在redis
运行任务
result = add.delay(4,4) print(result.backend) # 确认存储地 # 查看任务执行状态,True在执行中,False则是不在执行中 result.ready() # 获取任务执行结果,超时时间为1s result.get(timeout=1) # propagate默认为true。当设置为false时,如果get()引发异常,此参数可以覆盖此异常。 result.get(propagate=False) # 追踪异常 result.traceback
配置
Celery有一个输入和输出,输入连接broker,输出连接数据库
Celery的配置可以直接在app实例上进行,比如:
# 单个配置 app.conf.task_serializer = 'json' # 多个配置 app.conf.update( task_serializer='json', accept_content=['json'], # Ignore other content result_serializer='json', timezone='Europe/Oslo', enable_utc=True, )
也可以将配置写入python文件(文件路径与运行的celery的app在同一路径下),使用config_from_object('文件名')来获取配置
# celery_config.py broker_url = 'pyamqp://' result_backend = 'rpc://' task_serializer = 'json' result_serializer = 'json' accept_content = ['json'] timezone = 'Europe/Oslo' enable_utc = True task_routes = { 'tasks.add': 'low-priority', } task_annotations = { 'tasks.add': {'rate_limit': '10/m'} } ------------------------------ app.config_from_object('celert_config') # 可以使用python -m celeryconfig 查看语法是否正确
本文作者:注入灵魂
本文链接:https://www.cnblogs.com/totopian/p/15207365.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步