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

Flask框架單例模式實現(xiàn)方法詳解

 更新時間:2019年07月31日 10:50:42   作者:lmw1239225096  
這篇文章主要介紹了Flask框架單例模式實現(xiàn)方法,結(jié)合實例形式分析了flask框架單例模式的4種實現(xiàn)方式與相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Flask框架單例模式實現(xiàn)方法。分享給大家供大家參考,具體如下:

單例模式:

程序運(yùn)行時只能生成一個實例,避免對同一資源產(chǎn)生沖突的訪問請求。

Django   admin.py下的admin.site.register() ,  site就是使用文件導(dǎo)入方式的單例模式

創(chuàng)建到單例模式4種方式:

  • 1.文件導(dǎo)入
  • 2. 類方式
  • 3.基于__new__方式實現(xiàn)
  • 4.基于metaclass方式實現(xiàn)

1.文件導(dǎo)入:

in  single.py

class Singleton():
  def __init__(self):
    pass
site = Singleton()

類似:

import time  第一次已經(jīng)把導(dǎo)入的time模塊,放入內(nèi)存
import time  第二次內(nèi)存已有就不導(dǎo)入了

in  app.py

from single.py import site #第一次導(dǎo)入,實例化site對象并放入內(nèi)存

in  views.py

from single.py import site #第二次導(dǎo)入,直接從內(nèi)存拿。

2.類方式:

缺點:改變了單例的創(chuàng)建方式

obj = Singleton.instance()

# 單例模式:無法支持多線程情況
import time
class Singleton(object):
  def __init__(self):
    import time
    time.sleep(1)
  @classmethod
  def instance(cls, *args, **kwargs):
    if not hasattr(Singleton, "_instance"):
      Singleton._instance = Singleton(*args, **kwargs)
    return Singleton._instance
# # 單例模式:支持多線程情況
import time
import threading
class Singleton(object):
  _instance_lock = threading.Lock()
  def __init__(self):
    time.sleep(1)
  @classmethod
  def instance(cls, *args, **kwargs):
    if not hasattr(Singleton, "_instance"):
      with Singleton._instance_lock:
        if not hasattr(Singleton, "_instance"):
          Singleton._instance = Singleton(*args, **kwargs)
    return Singleton._instance

3.基于__new__方式實現(xiàn):

單例創(chuàng)建方式:

obj1 = Singleton()
obj2 = Singleton()

import time
import threading
class Singleton(object):
  _instance_lock = threading.Lock()
  def __init__(self):
    pass
  def __new__(cls, *args, **kwargs):
    if not hasattr(Singleton, "_instance"):
      with Singleton._instance_lock:
        if not hasattr(Singleton, "_instance"):
          Singleton._instance = object.__new__(cls, *args, **kwargs)
    return Singleton._instance

4.基于metaclass方式實現(xiàn)

基于metaclass方式實現(xiàn)的原理:

  • 1.對象是類創(chuàng)建,創(chuàng)建對象時候類的__init__方法自動執(zhí)行,對象()執(zhí)行類的 __call__ 方法
  • 2.類是type創(chuàng)建,創(chuàng)建類時候type的__init__方法自動執(zhí)行,類() 執(zhí)行type的 __call__方法

單例創(chuàng)建方式:

obj1 = Foo()
obj2 = Foo()

import threading
class SingletonType(type):
  _instance_lock = threading.Lock()
  def __call__(cls, *args, **kwargs):
    if not hasattr(cls, "_instance"):
      with SingletonType._instance_lock:
        if not hasattr(cls, "_instance"):
          cls._instance = super(SingletonType,cls).__call__(*args, **kwargs)
    return cls._instance
class Foo(metaclass=SingletonType):
  def __init__(self):
    pass

希望本文所述對大家基于flask框架的Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python 正則表達(dá)式(?=...)和(?<=...)符號的使用

    Python 正則表達(dá)式(?=...)和(?<=...)符號的使用

    本文主要介紹Python 正則表達(dá)式(?=...)和(?<=...)符號的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Python讀寫Excel文件庫的實現(xiàn)示例

    Python讀寫Excel文件庫的實現(xiàn)示例

    本文主要介紹了Python讀寫Excel文件庫的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • pandas round方法保留兩位小數(shù)的設(shè)置實現(xiàn)

    pandas round方法保留兩位小數(shù)的設(shè)置實現(xiàn)

    本文主要介紹了pandas round方法保留兩位小數(shù)的設(shè)置實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 教你用Python創(chuàng)建微信聊天機(jī)器人

    教你用Python創(chuàng)建微信聊天機(jī)器人

    這篇文章主要手把手教你用Python創(chuàng)建微信聊天機(jī)器人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 最新評論

    秦安县| 巫溪县| 华坪县| 襄樊市| 五大连池市| 崇信县| 北流市| 青海省| 石柱| 万山特区| 新蔡县| 保定市| 鄄城县| 太保市| 织金县| 淮南市| 梓潼县| 顺义区| 齐齐哈尔市| 营山县| 将乐县| 若羌县| 喀喇| 小金县| 青海省| 榆林市| 诸城市| 大庆市| 宝丰县| 周至县| 抚远县| 水富县| 大同市| 额敏县| 湖南省| 沁阳市| 万年县| 牡丹江市| 新河县| 阿拉尔市| 武冈市|