python使用celery实现订单超时取消

 更新时间:2021年08月25日 14:38:18   作者:A༒࿈  
这篇文章主要为大家详细介绍了python使用celery实现订单超时取消,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了celery实现订单超时取消的具体代码,供大家参考,具体内容如下

Celery官方文档中关于定时任务使用的说明

项目目录结构

我们需要新增一个任务目录,例如order:

celey_tasks/
     ├── config.py
     ├── __init__.py
     ├── main.py
     ├── order/
            ├── __init__.py
           └── tasks.py

在main.py中,注册任务目录【注意,接下来后面我们使用django的模型处理,所以必须对django的配置进行引入】

import os

from 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 crontab
from .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,代码

import os

from celery import Celery

# 1. 创建示例对象
app = Celery("luffy")

# 把celery和django进行组合,识别和加载django的配置文件
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev')

# 在当前clery中启动django框架,对django框架进行进行初始化
import django
django.setup()

# 2. 加载配置
app.config_from_object("celery_tasks.config")
# 3. 注册任务[自动搜索并加载任务]
# 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
# app.autodiscover_tasks(["任务1","任务2"])
app.autodiscover_tasks(["celery_tasks.sms","celery_tasks.order"])

# 4. 在终端下面运行celery命令启动celery
# celery -A 主程序 worker --loglevel=info
# celery -A celery_tasks.main worker --loglevel=info

注意,因为在django中是有时区配置的,所以,我们在django框架配置中也要修改时区配置。

任务代码tasks.py的实现:

from celery_tasks.main import app
from orders.models import Order
from datetime import datetime
from 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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Keras 中Leaky ReLU等高级激活函数的用法

    Keras 中Leaky ReLU等高级激活函数的用法

    这篇文章主要介绍了Keras 中Leaky ReLU等高级激活函数的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue常用指令代码实例总结

    vue常用指令代码实例总结

    这篇文章主要介绍了vue常用指令代码实例,需要的朋友可以参考下
    2020-03-03
  • Python新手入门之单引号、双引号与三引号的差异与应用示例

    Python新手入门之单引号、双引号与三引号的差异与应用示例

    在Python当中表达字符串既可以使用单引号,也可以使用双引号,那两者有什么区别吗?下面这篇文章主要给大家介绍了关于Python新手入门之单引号、双引号与三引号的差异与应用示例,需要的朋友可以参考下
    2024-03-03
  • python 下载m3u8视频的示例代码

    python 下载m3u8视频的示例代码

    这篇文章主要介绍了python 下载m3u8视频的示例代码,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python中的闭包与装饰器的用法详解

    Python中的闭包与装饰器的用法详解

    这篇文章主要介绍了Python中的闭包与装饰器的用法详解,装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象,需要的朋友可以参考下
    2023-07-07
  • Python 中使用 argparse 解析命令行参数

    Python 中使用 argparse 解析命令行参数

    这篇文章主要介绍了Python 中使用 argparse 解析命令行参数,argparse 模块是一个强大的命令行参数解析器,还有很多功能没能在这里介绍。下面文化在哪个详细介绍该内容,需要的朋友可以参考一下
    2021-11-11
  • python3中sorted函数里cmp参数改变详解

    python3中sorted函数里cmp参数改变详解

    在本篇文章里小编给大家整理的是关于python3中sorted函数里关于cmp这一参数的改变相关内容,需要的朋友们可以学习下。
    2020-03-03
  • Django环境下使用Ajax的操作代码

    Django环境下使用Ajax的操作代码

    AJAX 的主要目标是在不刷新整个页面的情况下,通过后台与服务器进行数据交换和更新页面内容,通过 AJAX,您可以向服务器发送请求并接收响应,然后使用 JavaScript 动态地更新页面的部分内容,这篇文章主要介绍了Django环境下使用Ajax,需要的朋友可以参考下
    2024-03-03
  • python冒泡排序算法的实现代码

    python冒泡排序算法的实现代码

    这篇文章主要介绍了python冒泡排序算法的实现代码,大家参考使用
    2013-11-11
  • Python中re模块的元字符使用小结

    Python中re模块的元字符使用小结

    元字符是正则表达式中具有特殊意义的专用字符,本文主要介绍了Python中re模块的元字符使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论