celery相关

1、运行celery worker

# -A 指的是运行的celery实例,形式为:module.path:attribute
# 如果仅指定了包名称,它将尝试按以下顺序搜索应用程序实例
# 与--app=proj:
# 1、名为 的属性proj.app
# 2、名为 的属性proj.celery
# 3、模块proj中值为 Celery 应用程序的任何属性
# 如果这些都没有找到,它会尝试一个名为 的子模块proj.celery:
# 4、名为 的属性proj.celery.app
# 5、名为 的属性proj.celery.celery
# 6、模块proj.celery中值为 Celery 应用程序的任何属性。
celery -A proj worker --loglevel=info 
celery -A celery_tasks.main worker --loglevel=info -P eventlet  -c 10    # windows下需要使用eventlet方式启动  -c是协程的数量,生产环境可以用1000

celery -A celery_tasks.main flower   启动监控
celery -A proj beat    周期性任务需执行

# 服务器启动celery
celery multi start -A celery_tasks.main worker  -l info  --logfile=celery.log --pidfile=celery.pid
默认情况下,它将在当前目录中创建 pid 和日志文件。为了防止多个工作人员在彼此之上启动,我们鼓励您将它们放在一个专用目录中:
$ mkdir -p /var/run/celery
$ mkdir -p /var/log/celery
$ celery multi start w1 -A proj -l INFO --pidfile=/var/run/celery/%n.pid --logfile=/var/log/celery/%n%I.log

 # 修改celery之后, 重启本celery
celery multi restart -A celery_tasks.main worker  -l info  --logfile=celery.log --pidfile=celery.pid    # --pidfile参数可以确保没有旧worker运行,可能意外启动很多个worker,劫持任务
# 停止celery
celery multi stop w1 -A proj -l INFO # 不会等待任务完成
celery multi stopwait w1 -A proj -l INFO  # 会确保退出之前完成所有当前正在执行的任务

# Stopping the worker 停止worker可以使用ctrl + C

2、配置文件加载

app.config_from_object('celeryconfig') # celeryconfig.py必须可以从当前目录或 Python 路径加载名为的模块
broker_url = 'amqp://myuser:mypassword@localhost:5672/myvhost' # rabbitmq配置
app.conf.broker_url = 'redis://:password@hostname:port/db_number' # redis配置,如:app.conf.broker_url = 'redis://localhost:6379/0'   默认为localhost 端口 6379,使用数据库 0

result_backend = 'redis://127.0.0.1:6379/2'  # 用Redis做结果存储,celery默认情况下禁用结果,flow等是通过事件通知的,每个任务唯一标识符(UUID),返回变量调用get函数可以获取到结果,类似:
>>> res = add.delay(2, 2)
>>> res.get(timeout=1)
4
# 直接连接到 Redis Sentinel 列表:
app.conf.broker_url = 'sentinel://localhost:26379;sentinel://localhost:26380;sentinel://localhost:26381'
app.conf.broker_transport_options = { 'master_name': "cluster1" }

app.conf.broker_transport_options = {'visibility_timeout': 3600}  # Redis 的默认可见性超时为 1 小时 3600

3、监控状态

status: List active nodes in this cluster

$ celery -A proj status  显示在集群中线上的worker名单

4、Redis相关

pip install -U "celery[redis]"    一次性安装celery和redis依赖项

5、问题:

1[结果后端不工作或任务始终处于PENDING状态](https://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#id1)

6、源码相关
celery 自己实现的一个 有向无环图(DAG)的数据结构,根据命令行传入的不同参数,初始化不同的组件,并执行这些组件的初始化方法。

模块导入问题

7、任务调用

add.delay(2, 2)


subs.apply_async(args=[55,22],
                     task_id='aaaaa2222',
                     countdown=5,
                     shadow = 'zouzou'
                     )

""" apply_async后可跟以下参数
task_id:任务唯一id
countdown:任务多长时间后执行,单位为秒
eta:定义任务的开始时间,eta=time.time()+5,单位为秒,是UTC时间,设置成国内时间也没有用
expires:设置任务过期时间,任务在过期时间后还没有执行则被丢弃,单位为秒
retry:如果任务失败后,是否重试,默认为True
shadow:重新指定任务的名字,覆盖其在日志中使用的任务名称
retry_policy:{} 重试策略,max_retries:最大重试次数,默认为3次。interval_start:重试等待的时间间隔,默认为0。interval_step:每次重试让重试间隔增加的秒数,默认为0.2秒。interval_max:重试间隔最大的秒数,既通过interval_step增大到多少秒之后,就不在增加了,默认为0.2秒。
routing_key:自定义路由键
queue:指定发送到哪个队列
exchange:指定发送到哪个交换机
priority:任务队列的优先级,0到255之间,对于rabbitmq来说0是最高优先级
headers:为任务添加额外的消息
"""


app.send_task(task1.add,args=[1,2])
# 不建议用,因为不会校验是否存在这个方法,直接就发送成功里,celery执行就会报错

请添加图片描述
celery学习笔记
celery5.1.2文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL是一种关系型数据库管理系统,它使用结构化查询语言(SQL)进行数据管理。MySQL具有高性能、可靠性和可扩展性,被广泛应用于各种Web应用程序和企业级应用程序中。 Celery是一个基于Python的分布式任务队列框架,它可以用于异步处理、定时任务和任务调度等场景。Celery提供了一种简单而灵活的方式来将任务分发到多个工作节点上执行,并且支持多种消息中间件来实现任务的传递和调度。 在Celery中,消息中间件用于在任务生产者和消费者之间传递任务消息。MySQL可以作为Celery的消息中间件之一,用于存储和传递任务消息。当任务生产者将任务发送到Celery队列时,任务消息会被存储在MySQL数据库中。然后,消费者从数据库中获取任务消息并执行相应的任务。 使用MySQL作为Celery的消息中间件有以下几个优点: 1. 可靠性:MySQL具有良好的数据持久性和可靠性,可以确保任务消息不会丢失。 2. 可扩展性:MySQL支持水平扩展和集群部署,可以满足高并发任务处理的需求。 3. 数据管理:MySQL提供了强大的数据管理功能,可以对任务消息进行查询、统计和监控。 需要注意的是,使用MySQL作为Celery的消息中间件可能会对性能产生一定的影响,因为数据库操作通常比其他消息中间件的操作更耗时。因此,在选择消息中间件时,需要根据具体的应用场景和需求进行权衡和选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值