celery 的定时任务

其实在我们开发的时候,我是非常恶心用celery来做定时任务,可是没有办法,Leader又不让用第三方模块,那只能硬着头皮写了。

为什么要用celery?

 Celery是一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度

celery的组成以及原理?


主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结果)

​ 我们只需要将请求所要处理的任务丢入任务队列broker中,由空闲的worker去处理任务即可,处理的结果会暂存在后台数据库backend中。我们可以在一台机器或多台机器上同时起多个worker进程来实现分布式地并行处理任务
 

delay异步调用


使用rabbitmq和redis作为broker的优劣势分别是什么?


服务 redis rabbitmq
可靠消费 没有相应的机制保证消息的消费,当消费者消费失败的时候,消息体丢失,需要手动处理(list) 具有消息消费确认,即使消费者消费失败,也会自动使消息体返回原队列,同时可全程持久化,保证消息体被正确消费
可靠发布 不提供 具有发布确认功能,保证消息被发布到服务器
高可用 可以采用主从模式,读写分离,但是故障转移尚未完善 集群采用磁盘、内存节点,任意单点故障都不会影响整个队列的操作
持久化 需要将整个Redis实例持久化到磁盘 队列,消息,都可以选择是否持久化
消费者负载均衡 不提供 根据消费者情况,进行消息的均衡分发
队列监控 不提供 后台可以监控某个队列的所有信息,(内存,磁盘,消费者,生产者,速率等)
流量控制 不提供 服务器过载的情况,对生产者速率会进行限制,保证服务可靠性
具体使用rabbitmq还是redis还是要根据项目需求来进行判断:

对于消耗资源这方面不是很介意的话,注重性能和体验,同时能够分出专员来维护rabbitmq服务器,那么rabbitmq还是强烈推荐的,毕竟rabbitmq能实现的实在是非常的全面而且效果也好。
如果在项目中,只需要实现很简单的功能,同时对返回消息、数据处理上面要求不是那么高的话,还是非常推荐使用redis的,毕竟redis使用起来更加的便捷、快速。

一般公司里使用RabbitMQ,kafka等第三方消息队列时,都会消耗人力物力,去维护.使用redis是比较快速的.这里我就是用到redis来做消息队列的,

from datetime import timedelta
from celery import Celery




# 指定消息中间件,又称为消息代理
BROKER_URL = 'redis://127.0.0.1:6379/1'
# 任务处理完保存状态信息和结果,以供查询
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
# 客户端和消费者之间传输数据需要序列化和反序列化
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24
CELERY_ACCEPT_CONTENT = ["json"]

app = Celery(name='worker', backend=CELERY_RESULT_BACKEND, broker=BROKER_URL)

app.conf.timezone = "Asia/Shanghai"
app.conf["imports"] = ['celery_task']

# 定时任务
app.conf.beat_schedule={
    'task1': {
        # 文件夹名.文件名.方法名
        'task': 'celery_task.task',
        # 什么时间点执行,多少秒执行一次(eg:3秒一执行)
        'schedule': timedelta(seconds=10),
        # 这是传入参数
        'args': ()
    }
}

# 启动celery
# celery -A celery_config worker -l info -P gevent

初始化完celery,编写定时任务。

@shared_task
def task():
    # 这里写定时任务
    pass
  

调度
# celery -A celery_config beat -l info

然后我们先启动celery ,之后再开一个终端发送定时任务。

最后,还是给大家推荐一个定时任务的模块:APscheduler。

比celey的定时简便很多,不过话说回来,celery还是能够锻炼自己。锻炼我们的思索逻辑能力。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值