千家信息网

celery异步定时任务怎么实现订单定时回滚

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"celery异步定时任务怎么实现订单定时回滚"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"celery异步定时任务怎么实现订单定时回滚"文章
千家信息网最后更新 2026年11月02日celery异步定时任务怎么实现订单定时回滚

这篇文章主要介绍"celery异步定时任务怎么实现订单定时回滚"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"celery异步定时任务怎么实现订单定时回滚"文章能帮助大家解决问题。

订单回滚

用celery异步,定时任务。可以设置:如果下单15分钟后没有支付,则取消订单。做反向操作

控制执行(多少时间后执行)

from datetime import datetimefrom pro_celery.celery import del_orderdef pay_status(order_id,check_time=5):  # 5秒后    ctime  = datetime.now()    utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())    from  datetime import timedelta    #seconds参数表示多少秒后执行    time_delay = timedelta(seconds=check_time)    time_task = utc_ctime+ time_delay    #提交任务给del_order,让他多久后执行    res = del_order.apply_async(args = [order_id,],eta= time_task)

celery异步定时任务

此任务是如果下单5秒后没有支付,则取消订单。做反向操作。库存再次添加到数据库。

注意:考虑到了并发量一多会出现零界点小概率事件,在执行库存加到数据库中的哪一行代码,用户立马支付了。

出现的后果:用户支付了,库存却加到数据库中了,订单也没有了。

如何避免:在事务里面判断影响的行数,如果影响行数为1,证明取消订单成功,可以commit。

如果没有影响行数,证明用户在这一刻支付成功,回滚数据

# 一定要判断pay_status,防止途中完成支付        row = models.Order.objects.filter(order_id = order_id,pay_status=0).update(status = "dead")        if row:            transaction.savepoint_commit(sid)        else:            transaction.savepoint_rollback(sid)
import celeryimport timebackend = "redis://127.0.0.1:6379/1"broker = "redis://127.0.0.1:6379/2"cel = celery.Celery("test",backend=backend,broker = broker)import os,sysimport djangoBASE_DIR = os.path.dirname(os.path.dirname(__file__)) #定位到你django的根目录sys.path.append(os.path.abspath(BASE_DIR))os.environ.setdefault("DJANGO_SETTINGS_MODULE", "shopapi.settings")django.setup()from django.db import transaction@cel.task@transaction.atomicdef del_order(order_id):    #要通过数据库来查当前order_id的订单状态,如果没有支付,我们要操作库存,并且取消订单    from  app01 import models    # 查询订单    data = models.Order.objects.filter(order_id = order_id,pay_status=0).first()    #如果data没有,表示以及支付成功,无需操作,反之要回滚库存    if data:        # 回滚哪些商品的库存,回滚多少?从哪里知道order_item中看        item_data = models.Order_items.objects.filter(order_id =order_id).values("product","nums")        # item_data-->[{'product':1,'nums":2},{product':2,'nums":1}]        all_product_dict = {k["product"] :k["nums"]  for k in item_data}        #{1:2,2:2}        all_product_id = list(all_product_dict.keys())        all_product = models.Product.objects.filter(product_id__in = all_product_id)        #开启事务        sid = transaction.savepoint()        for product in all_product:            for i in range(3):                stock = product.stock.quantity                new_stock = stock + all_product_dict[product.product_id]                #用了乐观锁                res = models.Stock.objects.filter(quantity=stock,stock_id=product.stock.stock_id).update(quantity=new_stock)                if not res:                    if i==2:                        transaction.savepoint_rollback(sid)                        from app01.func import function_tool                        function_tool.pay_status(order_id,1)                        return                    else:                        continue                else:                    break            new_buy_cont = product.buy_count-all_product_dict[product.product_id]            models.Product.objects.filter(product_id = product.product_id).update(buy_count = new_buy_cont)        # 一定要判断pay_status,防止途中完成支付        row = models.Order.objects.filter(order_id = order_id,pay_status=0).update(status = "dead")        if row:            transaction.savepoint_commit(sid)        else:            transaction.savepoint_rollback(sid)

关于"celery异步定时任务怎么实现订单定时回滚"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

订单 支付 任务 库存 数据 数据库 成功 用户 知识 影响 事务 行业 不同 中看 实用 乐观 一刻 一行 事件 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重生之互联网科技帝国 互联网的科技 互联网科技战争 小马过河互联网科技 南京欣网互联网科技 善班互联网科技有限公司 互联网科技上市公司 郑州华宇互联网科技 互联网科技股午盘股票涨跌 开启互联网科技时代小说 深圳前海聚择互联网科技有限公司 互联网教育科技公司vipkid 互联网新科技动漫ppt素材 长沙茂晟互联网科技有限公司 沐思想互联网科技有限公司 城市宝互联网科技有限公司 半导体行业属于互联网高科技类吗 萌小萌互联网科技河南有限公司 容联科技互联网电商 知域互联网科技有限公司官网 喔噻互联网科技有限公司 壹账通互联网科技 左右互联网络科技 消费医药和互联网科技 互联网科技圈年度人物 2021互联网科技公司排名 伍佰万互联网科技怎么赚钱 张召忠谈中国互联网科技 北京天晋互联网科技有限公司 唐山双旺合互联网科技产业园
0