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

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

 更新時間:2019年05月14日 08:35:28   作者:魚兒  
這篇文章主要給大家介紹了關于Django如何防止定時任務并發(fā)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用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拉起定時任務,那么就會面臨一個常見問題,如何避免前一次沒結束而后一次再次啟動的問題。

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

總結

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

相關文章

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

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

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

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

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

    python3實現表白神器

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

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

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

    Python numpy有哪些常用數據類型

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

    Python實現批量添加視頻文本水印

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

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

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

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

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

    python內存管理分析

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

    Python標準庫os常用函數和屬性詳解

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

最新評論

和龙市| 天水市| 唐山市| 淮北市| 崇文区| 西宁市| 葫芦岛市| 元阳县| 昌邑市| 嘉兴市| 定兴县| 沂南县| 工布江达县| 呼和浩特市| 延边| 永胜县| 洛宁县| 蒲江县| 黑龙江省| 桂阳县| 青铜峡市| 阳山县| 洛阳市| 宁陵县| 米林县| 甘洛县| 来安县| 三台县| 九龙县| 双牌县| 灵台县| 泸水县| 六盘水市| 石景山区| 崇明县| 阿克苏市| 辰溪县| 南丹县| 双峰县| 莱阳市| 罗源县|