最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django如何防止定時任務并發(fā)淺析

 更新時間:2019年05月14日 08:35:28   作者:魚兒  
這篇文章主要給大家介紹了關(guān)于Django如何防止定時任務并發(fā)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用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

文件鎖防并發(fā)

我們通常利用Crontab拉起定時任務,那么就會面臨一個常見問題,如何避免前一次沒結(jié)束而后一次再次啟動的問題。

通常都是用文件鎖來搞定這個事情,我做了一個簡單的裝飾器來包裝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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • python 實現(xiàn)mysql自動增刪分區(qū)的方法

    python 實現(xiàn)mysql自動增刪分區(qū)的方法

    這篇文章主要介紹了python 實現(xiàn)mysql自動增刪分區(qū)的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 深入解析opencv骨架提取的算法步驟

    深入解析opencv骨架提取的算法步驟

    這篇文章主要介紹了深入解析opencv骨架提取的算法步驟
    2022-05-05
  • python3實現(xiàn)表白神器

    python3實現(xiàn)表白神器

    這篇文章主要為大家詳細介紹了python3實現(xiàn)表白神器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python 對dataframe下面的值進行大規(guī)模賦值方法

    python 對dataframe下面的值進行大規(guī)模賦值方法

    今天小編就為大家分享一篇python 對dataframe下面的值進行大規(guī)模賦值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python numpy有哪些常用數(shù)據(jù)類型

    Python numpy有哪些常用數(shù)據(jù)類型

    Numpy提供了兩種基本的對象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存儲單一數(shù)據(jù)類型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進行處理的函數(shù)
    2023-02-02
  • Python實現(xiàn)批量添加視頻文本水印

    Python實現(xiàn)批量添加視頻文本水印

    這篇文章主要為大家詳細介紹了如何基于PyQt5開發(fā)一個視頻水印批量添加工具,旨在為多個視頻文件添加文本水印,感興趣的小伙伴可以參考一下
    2025-02-02
  • Jupyter安裝nbextensions,啟動提示沒有nbextensions庫

    Jupyter安裝nbextensions,啟動提示沒有nbextensions庫

    這篇文章主要介紹了Jupyter安裝nbextensions,啟動提示沒有nbextensions庫,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • python時間日期函數(shù)與利用pandas進行時間序列處理詳解

    python時間日期函數(shù)與利用pandas進行時間序列處理詳解

    python標準庫包含于日期(date)和時間(time)數(shù)據(jù)的數(shù)據(jù)類型,datetime、time以及calendar模塊會被經(jīng)常用到,而pandas則可以對時間進行序列化排序
    2018-03-03
  • python內(nèi)存管理分析

    python內(nèi)存管理分析

    這篇文章主要介紹了python內(nèi)存管理,較為詳細的分析了Python的內(nèi)存管理機制,需要的朋友可以參考下
    2015-04-04
  • Python標準庫os常用函數(shù)和屬性詳解

    Python標準庫os常用函數(shù)和屬性詳解

    os模塊是Python標準庫中的一個用于訪問操作系統(tǒng)相關(guān)功能的模塊,os模塊提供了一種可移植的使用操作系統(tǒng)功能的方法,本文給大家介紹下?OS標準庫常用函數(shù)和屬性,感興趣的朋友跟隨小編一起看看吧
    2022-11-11

最新評論

滦平县| 霍邱县| 高邮市| 万宁市| 潮安县| 水富县| 白河县| 拜泉县| 遂昌县| 万州区| 祁连县| 鲁甸县| 尉氏县| 济阳县| 齐齐哈尔市| 沧州市| 同江市| 甘孜| 图们市| 镇安县| 葵青区| 天台县| 佳木斯市| 镇宁| 高州市| 合川市| 韶山市| 信阳市| 元氏县| 临安市| 两当县| 广饶县| 临潭县| 旅游| 曲松县| 嘉禾县| 安吉县| 高唐县| 繁峙县| 错那县| 巢湖市|