时间:2021-05-22
本文实例为大家分享了celery实现订单超时取消的具体代码,供大家参考,具体内容如下
Celery官方文档中关于定时任务使用的说明
项目目录结构
我们需要新增一个任务目录,例如order:
celey_tasks/
├── config.py
├── __init__.py
├── main.py
├── order/
├── __init__.py
└── tasks.py
在main.py中,注册任务目录【注意,接下来后面我们使用django的模型处理,所以必须对django的配置进行引入】
import osfrom celery import Celery# 1. 创建示例对象app = Celery("luffy")# 2. 加载配置app.config_from_object("celery_tasks.config")# 3. 注册任务[自动搜索并加载任务]# 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称# app.autodiscover_tasks(["任务1","任务2"])app.autodiscover_tasks(["celery_tasks.order"])# 4. 在终端下面运行celery命令启动celery# celery -A 主程序 worker --loglevel=info# celery -A celery_tasks.main worker --loglevel=info接下来,在order任务目录下, 创建固定名字的任务文件tasks.py,代码:
from celery_tasks.main import app@app.task(name="check_order")def check_order(): print("检查订单是否过期!!!")接下来,我们需要把这个任务设置定时任务,所以需要借助Celery本身提供的Crontab模块。
在配置文件中,对定时任务进行注册:
# 任务队列的链接地址broker_url = 'redis://127.0.0.1:6379/15'# 结果队列的链接地址result_backend = 'redis://127.0.0.1:6379/14'from celery.schedules import crontabfrom .main import app# 定时任务的调度列表,用于注册定时任务app.conf.beat_schedule = { # Executes every Monday morning at 7:30 a.m. 'check_order_outtime': { # 本次调度的任务 'task': 'check_order', # 这里的任务名称必须先到main.py中注册 # 定时任务的调度周期 # 'schedule': crontab(minute=0, hour=0), # 每周凌晨00:00 'schedule': crontab(), # 每分钟 # 'args': (16, 16), # 注意:任务就是一个函数,所以如果有参数则需要传递 },}接下来,我们就可以重启Celery并启用Celery的定时任务调度器
先在终端下,运行celery的定时任务程序,以下命令:
celery -A celery_tasks.main beat # ycelery.main 是celery的主应用文件然后再新建一个终端,运行以下命令,上面的命令必须先指定:
celery -A celery_tasks.main worker --loglevel=info定时任务
经过上面的测试以后,我们接下来只需改造上面的任务函数,用于判断修改订单是否超时。
要完成订单的任务功能,如果需要调用django框架的模型操作,那么必须针对django框架进行配置加载和初始化。
main.py,代码
注意,因为在django中是有时区配置的,所以,我们在django框架配置中也要修改时区配置。
任务代码tasks.py的实现:
from celery_tasks.main import appfrom orders.models import Orderfrom datetime import datetimefrom django.conf import settings@app.task(name="check_order")def check_order(): # 查询出所有已经超时的订单 # 超时条件: 当前时间 > (订单生成时间 + 超时时间) =====>>>> (当前时间 - 超时时间) > 订单生成时间 now = datetime.now().timestamp() timeout_number = now - settings.ORDER_TIMEOUT timeout = datetime.fromtimestamp(timeout_number) timeout_order_list = Order.objects.filter(order_status=0, created_time__lte=timeout) for order in timeout_order_list: order.order_status = 3 order.save()配置文件,settings/dev.py,代码:
# 设置订单超时超时的时间[单位: 秒]ORDER_TIMEOUT = 12 * 60 * 60以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
途牛旅游取消订单的方法是: 取消方法一,免费取消订单 1、订单主要有两种订单,第一种,到店现付无担保订单,这种订单可以随时取消订单,不用经过客服干预自己就可
起步在《分布式任务队列Celery使用说明》中介绍了在Python中使用Celery来实验异步任务和定时任务功能。本文介绍如何在Django中使用Celery。
淘宝订单因为交易超时取消了,恢复步骤如下:1、登录淘宝网。如图所示回2、点击菜单栏上的“我的淘宝答”。如图所示3、点击左侧百功能里的“已买到的宝度贝”。如图所示
大多数的B2C商城项目都会有限时活动,当用户下单后都会有支付超时时间,当订单超时后订单的状态就会自动变成已取消,这个功能的实现有很多种方法,本文的实现方法适合大
我们在使用携程抢票的时候,系统会在火车出发前一个小时停止抢票,抢到票就会完成扣钱.如果我们不想抢票了就要及时取消订单.下面介绍下如何取消。软件名称:携程旅行客户