Flask框架單例模式實(shí)現(xiàn)方法詳解
本文實(shí)例講述了Flask框架單例模式實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
單例模式:
程序運(yùn)行時(shí)只能生成一個(gè)實(shí)例,避免對(duì)同一資源產(chǎn)生沖突的訪問(wèn)請(qǐng)求。
Django admin.py下的admin.site.register() , site就是使用文件導(dǎo)入方式的單例模式
創(chuàng)建到單例模式4種方式:
- 1.文件導(dǎo)入
- 2. 類方式
- 3.基于__new__方式實(shí)現(xiàn)
- 4.基于metaclass方式實(shí)現(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)入,實(shí)例化site對(duì)象并放入內(nèi)存
in views.py
from single.py import site #第二次導(dǎo)入,直接從內(nèi)存拿。
2.類方式:
缺點(diǎn):改變了單例的創(chuàng)建方式
obj = Singleton.instance()
# 單例模式:無(wú)法支持多線程情況 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__方式實(shí)現(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方式實(shí)現(xiàn)
基于metaclass方式實(shí)現(xiàn)的原理:
- 1.對(duì)象是類創(chuàng)建,創(chuàng)建對(duì)象時(shí)候類的__init__方法自動(dòng)執(zhí)行,對(duì)象()執(zhí)行類的 __call__ 方法
- 2.類是type創(chuàng)建,創(chuàng)建類時(shí)候type的__init__方法自動(dòng)執(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
希望本文所述對(duì)大家基于flask框架的Python程序設(shè)計(jì)有所幫助。
- python flask框架實(shí)現(xiàn)重定向功能示例
- Vue+Flask實(shí)現(xiàn)簡(jiǎn)單的登錄驗(yàn)證跳轉(zhuǎn)的示例代碼
- flask框架jinja2模板與模板繼承實(shí)例分析
- Flask框架模板繼承實(shí)現(xiàn)方法分析
- Flask框架模板渲染操作簡(jiǎn)單示例
- flask框架單元測(cè)試原理與用法實(shí)例分析
- Flask框架中request、請(qǐng)求鉤子、上下文用法分析
- flask框架路由常用定義方式總結(jié)
- Python?flask框架post接口調(diào)用示例
- Flask教程之重定向與錯(cuò)誤處理實(shí)例分析
相關(guān)文章
Python多進(jìn)程Process和管道Pipe的使用方式
這篇文章主要介紹了Python多進(jìn)程Process和管道Pipe的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python繪制分段函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了Python繪制分段函數(shù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04使用python將mdb數(shù)據(jù)庫(kù)文件導(dǎo)入postgresql數(shù)據(jù)庫(kù)示例
mdb格式文件可以通過(guò)mdbtools工具將內(nèi)中包含的每張表導(dǎo)出到csv格式文件。由于access數(shù)據(jù)庫(kù)和postgresQL數(shù)據(jù)庫(kù)格式上會(huì)存在不通性,所以使用python的文件處理,將所得csv文件修改成正確、能識(shí)別的格式2014-02-02最新解決沒(méi)有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件
這篇文章主要介紹了解決沒(méi)有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件,本文通過(guò)兩種問(wèn)題分析給大家分享解決方法,需要的朋友可以參考下2023-01-01python實(shí)現(xiàn)經(jīng)典排序算法的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)經(jīng)典排序算法的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02基于PyQt5制作Excel文件數(shù)據(jù)去重小工具
這篇文章主要介紹了如何利用PyQt5模塊制作一個(gè)Excel文件數(shù)據(jù)去重小工具,可以將單個(gè)或者多個(gè)Excel文件數(shù)據(jù)進(jìn)行去重操作,去重的列可以通過(guò)自定義制定,需要的可以參考一下2022-04-04利用Python-iGraph如何繪制貼吧/微博的好友關(guān)系圖詳解
這篇文章主要給大家介紹了關(guān)于利用Python-iGraph如何繪制貼吧/微博好友關(guān)系圖的相關(guān)資料,文中顯示介紹了在windows系統(tǒng)下安裝python-igraph的步驟,然后通過(guò)示例代碼演示了繪制好友關(guān)系圖的方法,需要的朋友可以參考下。2017-11-11