django 如何实现高并发(Django如何防止定时任务并发浅析)
类别:脚本大全 浏览量:238
时间:2021-10-01 01:26:06 django 如何实现高并发
Django如何防止定时任务并发浅析前言
django提供了commands类,允许我们编写命令行脚本,并且可以通过python manage.py拉起。
了解commands
具体django commands如何使用,大家参考官方文档即可:https://docs.djangoproject.com/en/2.2/howto/custom-management-commands/
一个坑
使用时遇到一个坑:在commands运行中的异常并不会打印到屏幕上,它要求我们必须抛出commanderror类型的异常才能被打印到屏幕中,具体参考:https://docs.djangoproject.com/en/2.2/howto/custom-management-commands/#command-exceptions
文件锁防并发
我们通常利用crontab拉起定时任务,那么就会面临一个常见问题,如何避免前一次没结束而后一次再次启动的问题。
通常都是用文件锁来搞定这个事情,我做了一个简单的装饰器来包装commands的handle方法,定义一套元类或者类装饰器都可以达到同样的目的,这里就不炫技了。
|
# -*- coding: utf-8 -*- import fcntl import os from apps.settings import cron_lock_dir # 尝试加锁 def try_lock(name): def decorator(func): def wrap( * args, * * kwargs): os.makedirs(cron_lock_dir, exist_ok = true) with open ( '{}/{}' . format (cron_lock_dir, name), 'w' ) as fd: try : fcntl.lockf(fd, fcntl.lock_ex | fcntl.lock_nb) # 加锁 func( * args, * * kwargs) fcntl.lockf(fd, fcntl.lock_un) # 解锁 except : # 加锁异常跳过 pass return wrap return decorator |
其中cron_lock_dir是文件锁的父目录,下面放了若干锁文件。
对commands的handle方法指定锁文件名即可:
|
class command(basecommand): @try_lock ( 'check_order' ) # 指定锁文件的名字 def handle( self , * args, * * options): pass |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
原文链接:https://yuerblog.cc/2019/05/13/django-防止定时任务并发/
您可能感兴趣
- python定时任务脚本(对Python定时任务的启动和停止方法详解)
- react定时任务(手把手带你用React撸一个日程组件)
- laravel框架怎么定时任务(laravel Model 执行事务的实现)
- python线程自动停止了(解决Python中定时任务线程无法自动退出的问题)
- python自定义定时任务(python的schedule定时任务模块二次封装方法)
- mysql定时任务
- python定时任务(Python使用crontab模块设置和清除定时任务操作详解)
- django 如何实现高并发(Django如何防止定时任务并发浅析)
- php 创建定时任务(PHP扩展Swoole实现实时异步任务队列示例)
- navicat创建MySql定时任务的方法详解(navicat创建MySql定时任务的方法详解)
- 数据库sqlserver定时任务(SQL Server 2005作业设置定时任务)
- MySQL定时任务(EVENT事件)如何配置详解(MySQL定时任务EVENT事件如何配置详解)
- sass定时任务(sass简介_动力节点Java学院整理)
- python定时任务详解(使用Python做定时任务及时了解互联网动态)
- php如何定时执行某项(php解决crontab定时任务不能写入文件问题的方法分析)
- 探索中国神秘文字(探索中国神秘文字)
- 重温《蜗居》 宋思明选中海藻为红颜知己,纯属巧合,与爱无关(宋思明选中海藻为红颜知己)
- 越南旅游攻略(越南旅游攻略自由行)
- 成都旅游攻略(成都旅游攻略自由行最佳线路)
- 给儿童吃什么最好(给儿童吃什么最好消化)
- 杭州旅游攻略()
热门推荐
- python远程下发shell指令(Python实现堡垒机模式下远程命令执行操作示例)
- canvas如何将一组数据生成柱子图(Canvas环形饼图与手势控制的实现代码)
- django查找路径(Django Sitemap 站点地图的实现方法)
- sqlserver分组查询(sql server如何利用开窗函数over进行分组统计)
- django中的limit用法(如何在Django中添加没有微秒的 DateTimeField 属性详解)
- dataframe取几列数据(dataframe 按条件替换某一列中的值方法)
- css垂直居中16个方法(css实现元素垂直居中的常用方法总结)
- sql取整数函数(SQL中位数函数实例)
- vuefor指令使用教程(Vue必学知识点之forEach的使用)
- react 分页列表优化(使用react-beautiful-dnd实现列表间拖拽踩坑)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9