django中使用celery

本文详细介绍了Django中如何集成并使用Celery进行异步任务处理,包括基本使用、多任务结构、延时任务和定时任务的配置。通过示例展示了在Django项目中创建Celery实例,配置消息中间件和结果存储,以及启动worker和提交任务。此外,还探讨了Celery在秒杀场景中的应用,以及如何在Django中实现定时更新缓存的任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django中使用celery

1. celery基本使用

1. 写一个t_celery.py文件
    import celery
    # 消息中间件(redis)
    broker='redis://127.0.0.1:6379/1'     # 1 表示使用redis 1 这个db
    # 结果存储(redis)
    backend='redis://127.0.0.1:6379/2'   # 2 表示使用redis 2 这个db
    # 实例化得到对象,指定中间件和结果存储
    app=celery.Celery('test',broker=broker,backend=backend)
    @app.task
    def add(a,b):
        return a+b
    @app.task
    def mul(a,b):
        return a*b
    
2. 提交任务(在其它文件中)
    from t_celery import add, mul
    res=add.delay(100,4) 
    print(res)  # id号
    
3. 启动worker
	# 非windows平台:celery worker -A t_celery -l info
    # windows装eventlet:celery worker -A t_celery -l info -P eventlet
    
4. 查看执行结果
	from t_celery import app
    from celery.result import AsyncResult
    # 关键字,变量不能定义为关键字
    id = '5331c70b-1b51-4a15-aa17-2fa0f7952c00'
    if __name__ == '__main__':
        res = AsyncResult(id=id, app=app)
        if res.successful():
            result = res.get()
            print(result)
        elif res.failed():
            print('任务失败')
        elif res.status == 'PENDING':
            print('任务等待中被执行')
        elif res.status == 'RETRY':
            print('任务异常后正在重试')
        elif res.status == 'STARTED':
            print('任务已经开始被执行')

2. celery多任务结构

1. 流程简介

# 包架构封装(多任务结构)
package_celery:       # 项目名
    celery_task       # celery包名
        __init__.py   # 包文件
        celery.py     # celery连接和配置相关文件,且名字必须叫celery.py
        order_task.py # 任务
        user_task.py  # 任务
    result.py         # 结果查询
    submit_tast.py    # 提交任务
    
# 运行worker(在package_celery目录下执行)
	celery worker -A celery_task -l info -P eventlet
    
# 提交任务
    from celery_task import order_task,user_task
    # 提交一个给用户发短信的任务
    res=user_task.send_sms.delay('18723454566')
    print(res)
    # 提交一个取消订单任务
    res=order_task.cancel_order.delay()
    print(res)
    
# 真实应用场景
# 秒杀系统
	不能秒超,使用锁(mysql悲观锁,乐观锁),redis锁
		提高并发量 => 把同步做成异步 => 使用celery
        
	前端点击秒杀按钮,向后端发送秒杀请求 
        => 同步操作
            1. 请求来到后端,判断数量是否够,如果够,要生成订单(mysql),订单状态是待支付状态	
            2. 请求返回,告诉前端,秒杀成功
        => 异步操作
        	1
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I believe I can fly~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值