Python异步任务celery的使用,celery分布式队列管理工具 | celery定时任务

为什么使用celery

在实际的开发过程中经常会出现一些耗时操作,或者一些定时操作,比如定时短信、邮件、定时清理等等… 所以使用celery是一个很好的选择。

celery是什么

celery是用来处理大量信息的分布式系统,同时提供了操作和维护分布式系统做需要的分布式工具,简单来说,celery就是一个管理分布式队列的工具。
celery本身不是任务队列,知识一个分布式管理工具,内部封装了各种的队列操作,使用celery可以更方便快捷的管理任务队列。

环境

celery == 3.1.25
redis == 2.10.0

eg1 最简单celery的使用案例

一、创建一个tasks.py文件,

import time
from celery import Celery

backend = 'redis://localhost:6379/0'
broker = 'redis://localhost:6379/0'
# 创建celery对象
app = Celery('task_add', backend=backend, broker=broker)

# 创建celery任务
@app.task(name='number_add')
def number_add(x, y):
    time.sleep(4)
    print('number_add 进来了...')
    return x + y

二、创建test.py文件用来执行celery任务

# 我的tasks.py test.py文件都是在celery_task文件夹中
from celery_task.tasks import number_add

# 调用方法
if __name__ == '__main__':
    print('start task...')
    # 调用delay方法开启任务
    result = number_add.delay(3, 5)
    print('end task...')
    # 拿到任务结果
    num = result.get()
    print(num)

三、开启celery,等待任务执行

# -A 后面指定任务就是tasks.py,后面的路径--workdir ./celery_task,根据自己的文件修改,执行的命令在同一文件下可以不要
celery worker -A tasks -l INFO --workdir ./celery_task

在这里插入图片描述
看到这个界面说明celery执行成功。
四、执行任务,
执行test.py里面的代码,可以看到输出结果。

eg2 模块化celery任务

首先看一下目录结构:
在这里插入图片描述
一、__init __.py初始化文件


from celery import Celery
# 任务名称demo
app = Celery('demo')
# 通过celery实例加载配置模块,配置信息在celeryconfig.py文件中
app.config_from_object('celery_task.celeryconfig')

二、celeryconfig.py配置文件


BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
# 时区
CELERY_TIMEZONE = 'Asia/Shanghai'

# 导入指定的任务模块
CELERY_IMPORTS = (
    'celery_task.tasks'
)

三、tasks.py任务管理,
和上面的task.py文件内容一致,这里app是导入的不是创建的

# 模块化之后
from celery_task import app

@app.task
def number_add(x, y):
    time.sleep(4)
    print('number_add 进来了...')
    return x + y

四、tast.py文件,用来执行任务

# 模块化之后
from celery_task import tasks

# 调用方法
if __name__ == '__main__':
    print('start task...')
    result = tasks.number_add.delay(3, 5)
    print('end task...')
    num = result.get()
    print(num)

五、celery启动命令
这里与上面的命令不一样

# celery_task:是celery_task.py文件,
# 这里没有指定路径,因为命令是在celery_task.py文件父目录下执行的,所以不用指定。
celery worker -A celery_task -l INFO

六、运行test.py文件代码

celery定时任务

将上面的配置文件celeryconfig.py中增加如下代码:

# celeryconfig.py

# 定时任务
CELERYBEAT_SCHEDULE = {
    # 任务一,每10秒指定一次
    'task_1': {
        # 指定任务
        'task': 'celery_task.tasks.number_add',
        # 每十秒执行一次
        'schedule': timedelta(seconds=10),
        # 参数
        'args': (3, 6)
    },
    # 任务二,定时执行,每天固定时间执行
    'task_2': {
        # 指定任务
        'task': 'celery_task.tasks.number_mult',
        # 每天执行
        'schedule': crontab(hour=18,minute=31),
        # 参数
        'args': (3, 6)
    }
}

还要在tasks.py中增加一个任务方法:

# tasks.py

@app.task
def number_mult(x, y):
    print('定时-乘法')
    return x * y

这里提醒一下celery==4.10版本的每天的定时任务可能有bug,请使用其他版本。
执行celery启动命令:
两条命令

celery worker -A celery_task -l INFO
# celery beat是用来开启定时任务调度的
celery beat -A celery_task -l INFO

详细的定时任务代码请看:Python异步任务celery,celery定时任务,定时发送邮件、短信、执行清理等等

参考资料:
celery-分布式队列管理工具
官方文档
celery视频

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值