南强小屋 Design By 杰米
本文实例讲述了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程序设计有所帮助。
标签:
Flask,单例模式
南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米
暂无Flask框架单例模式实现方法详解的评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。