Flask框架单例模式实现方法详解

 更新时间:2019年07月31日 10:50:42   作者:lmw1239225096  
这篇文章主要介绍了Flask框架单例模式实现方法,结合实例形式分析了flask框架单例模式的4种实现方式与相关操作技巧,需要的朋友可以参考下

本文实例讲述了Flask框架单例模式实现方法。分享给大家供大家参考,具体如下:

单例模式:

程序运行时只能生成一个实例,避免对同一资源产生冲突的访问请求。

Django   admin.py下的admin.site.register() ,  site就是使用文件导入方式的单例模式

创建到单例模式4种方式:

  • 1.文件导入
  • 2. 类方式
  • 3.基于__new__方式实现
  • 4.基于metaclass方式实现

1.文件导入:

in  single.py

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

类似:

import time  第一次已经把导入的time模块,放入内存
import time  第二次内存已有就不导入了

in  app.py

from single.py import site #第一次导入,实例化site对象并放入内存

in  views.py

from single.py import site #第二次导入,直接从内存拿。

2.类方式:

缺点:改变了单例的创建方式

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__方式实现:

单例创建方式:

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方式实现

基于metaclass方式实现的原理:

  • 1.对象是类创建,创建对象时候类的__init__方法自动执行,对象()执行类的 __call__ 方法
  • 2.类是type创建,创建类时候type的__init__方法自动执行,类() 执行type的 __call__方法

单例创建方式:

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程序设计有所帮助。

相关文章

  • Python操作XML文件的使用指南

    Python操作XML文件的使用指南

    我们经常需要解析用不同语言编写的数据,Python 提供了许多第三方库来解析或拆分用其他语言编写的数据,今天我们来学习下 Python XML 解析器的相关功能
    2022-09-09
  • 解读python正则表达式括号问题

    解读python正则表达式括号问题

    这篇文章主要介绍了python正则表达式括号问题解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • python实现中文输出的两种方法

    python实现中文输出的两种方法

    这篇文章主要介绍了python实现中文输出的两种方法,实例分析了Python操作中文输出的技巧,需要的朋友可以参考下
    2015-05-05
  • Python基础详解之列表复制

    Python基础详解之列表复制

    这篇文章主要介绍了Python基础详解之列表复制,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python利用逻辑回归模型解决MNIST手写数字识别问题详解

    Python利用逻辑回归模型解决MNIST手写数字识别问题详解

    这篇文章主要介绍了Python利用逻辑回归模型解决MNIST手写数字识别问题,结合实例形式详细分析了Python MNIST手写识别问题原理及逻辑回归模型解决MNIST手写识别问题相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • Python中关于函数的具体用法范例以及介绍

    Python中关于函数的具体用法范例以及介绍

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
    2021-09-09
  • python 绘制国旗的示例

    python 绘制国旗的示例

    这篇文章主要介绍了python 绘制国旗的示例,帮助大家利用python绘制,处理图像,感兴趣的朋友可以了解下
    2020-09-09
  • 用Django实现一个可运行的区块链应用

    用Django实现一个可运行的区块链应用

    这篇文章主要介绍了用Django实现一个可运行的区块链应用,需要的朋友可以参考下
    2018-03-03
  • Python动态强类型解释型语言原理解析

    Python动态强类型解释型语言原理解析

    这篇文章主要介绍了Python动态强类型解释型语言原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python爬取抖音视频的实例分析

    python爬取抖音视频的实例分析

    在本篇内容里小编给大家整理一篇关于python爬取抖音视频的实例分析的相关内容,有兴趣的朋友可以测试下实例内容。
    2021-01-01

最新评论