免费网站友情链接深圳网站建设平台

diannao/2026/1/16 20:02:28/文章来源:
免费网站友情链接,深圳网站建设平台,怎么处理脓包痘痘,网站网页栅格化目录#xff1a; 单例模式在类中实现装饰器批量装饰实现单例模式 #xff0c;且不丢失类型提示限制实例个数 1.重写__new__方法实现多线程情况下的单例模式 用new方法实现单例模式 import time, threadingclass Singleton:单例模式————最多只允许创…目录 单例模式在类中实现装饰器批量装饰实现单例模式 且不丢失类型提示限制实例个数 1.重写__new__方法实现多线程情况下的单例模式 用new方法实现单例模式 import time, threadingclass Singleton:单例模式————最多只允许创建一个该类实例_lock threading.Lock()_instance Nonedef __new__(cls, a, b, *args, **kwargs):time.sleep(1) # 模拟高并发情况with cls._lock:# print(进入lock区域)if not cls._instance:cls._instance object.__new__(cls)# cls._instance super().__new__(cls) # 与上一条作用相同# cls._instance.a areturn cls._instance# S Singleton(1, 2) # print(S)def task(a, b):s Singleton(a, b)print(s)for i in range(5):t threading.Thread(targettask, args(2, 3))t.start()运行始终为单一实例 __main__.Singleton object at 0x0000029E71D3B070__main__.Singleton object at 0x0000029E71D3B070 __main__.Singleton object at 0x0000029E71D3B070__main__.Singleton object at 0x0000029E71D3B070__main__.Singleton object at 0x0000029E71D3B0702.使用装饰器实现多线程情况下的单例模式 想要批量给多个类实现单例模式自然少不了装饰类的装饰器 先介绍第一种方法线程锁的方式和前面的稍有不一样没有使用类的内部属性记录实例对象而是使用了字典键唯一的特性将类对象Example作为键实例化后的对象作为值 2.1 第一种实现方式不推荐使用 错误示例 import time from functools import wraps import threadingdef singleton_dec(class_):map_ {} # 定义一个字典类本身作为键实例化后的对象作为其相应的值wraps(class_) # 顺便复习一下装饰器将被装饰的函数改回原来的属性和名字def singleton(*args):# print(class_.__name__)# print(class_.foo.__name__)if class_ not in map_: # 如果类没有在字典就实例化time.sleep(1) # 没有加锁的情况下模拟多线程的情况map_[class_] class_(*args) # 实例化类方法并存到字典中return map_[class_] # 字典中有这个类就不实例化return singletonsingleton_dec class EXAMPLE:def __init__(self, paramabc):self.param paramdef foo(self):pass# E1 EXAMPLE(123) # print(E1.param) # print(E1) # E2 EXAMPLE(456) # 由于EXAMPLE已经实例化了在map_中这一步并没有对EXAMPLE做出任何改变 # print(E2.param) # 输出的依然是123 # print(E2)def task():e EXAMPLE()print(e)for i in range(5):t threading.Thread(targettask)t.start()加上sleep模拟多线程的执行结果 __main__.EXAMPLE object at 0x000001BD894A7128 __main__.EXAMPLE object at 0x000001BD8949E710 __main__.EXAMPLE object at 0x000001BD894A1DD8 __main__.EXAMPLE object at 0x000001BD8949EB00 __main__.EXAMPLE object at 0x000001BD8949E710可以看到在并发情况很高的时候并没有实现单例化 因为方法二没有像方法一一样设置线程锁所以这里会出现创建多个实例的情况 想要实现单例也需要像方法一中一样加上线程锁 不过是给字典方法加上一个线程锁 示例 # -*- coding: utf-8 -*- import threading, time from functools import wrapsclass DictWithLock(dict):lock threading.Lock()def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)def singleton_decorator(callable_obj):dl DictWithLock()wraps(callable_obj)def inner(*args, **kwargs):# print(测试, *args, **kwargs)time.sleep(1)with dl.lock: # 一次只能有一个线程使用DictWithLock的lock属性# print(进入lock区域)if not dl.get(_instance):dl[_instance] callable_obj(*args, **kwargs)return dl[_instance]return innersingleton_decorator class Test:def __init__(self, a0, b1):print(Test.test, a, b)def task(a, b):t Test(a, b)print(t) # t.a时不会有提示# t0 Test(2, 3) # print(t0)for i in range(5):tsk threading.Thread(targettask, args(2, 3))tsk.start()输出结果 Test.test 2 3 __main__.Test object at 0x00000292250AB070 __main__.Test object at 0x00000292250AB070__main__.Test object at 0x00000292250AB070__main__.Test object at 0x00000292250AB070__main__.Test object at 0x00000292250AB070已结束退出代码 0 线程各自异步执行但始终只会创建一个Example的实例 这种方式是按照一般实现装饰器的方式实现不过这种装饰器有明显的缺点被装饰过的类不会有类型提示 于是祭出第二种类的装饰器写法 2.2 第二种实现方式 被装饰过的类不会丢失类型提示 # -*- coding: utf-8 -*- import threadingdef Singleton(cls):# print(log singleton)cls._instance Nonecls._lock threading.Lock()def __new__(*args, **kwargs): # print(flog new, args, kwargs) # 实际上args中也包含cls和相关的参数with cls._lock:if not cls._instance:cls._instance object.__new__(cls)return cls._instancecls.__new__ __new__return clsSingleton class T:def __init__(self, a):self.a adef t1():t T(1)tt T(2)print(t, t.a) # t.a时有提示print(tt, t.a)def t11():def task(a):s T(a)print(s)for i in range(5):t threading.Thread(targettask, args(2, ))t.start()if __name__ __main__:# t1()t11() 输出 __main__.T object at 0x000001EFE5977850 __main__.T object at 0x000001EFE5977850 __main__.T object at 0x000001EFE5977850 __main__.T object at 0x000001EFE5977850 __main__.T object at 0x000001EFE5977850限制实例个数的模式————limit实例模式 __new__()方法实现最多创建3个实例的模式 class LimitedInstances:限制实例个数的模式————limit实例模式_instances []limit 3def __new__(cls, *args, **kwargs):if not len(cls._instances) cls.limit: # 若个数达到limit说明已满raise Exception(fCan not create instance more than {cls.limit}.)instance super().__new__(cls)cls._instances.append(instance)return instancedef __delete__(self):self._instances.remove(self)LI1 LimitedInstances(1, 2) LI2 LimitedInstances(2, 2)LI3 LimitedInstances(3, 2) LI3.__delete__() LI4 LimitedInstances(4, 2) print(f删除一个又加进来一个还是3个\n, LimitedInstances._instances) # LI5 LimitedInstances(5, 2) # 超过3个会报错运行结果限制最多3个实例 删除一个又加进来一个还是3个实例[__main__.LimitedInstances object at 0x00000278A03BDE20, __main__.LimitedInstances object at 0x00000278A03BDDC0, __main__.LimitedInstances object at 0x00000278A03BD520]模拟高并发情况下还是可能会出现超过3个实例的情况 import time, threadingclass LimitedInstances:限制实例个数的模式————limit实例模式_instances []limit 3def __new__(cls, *args, **kwargs):if not len(cls._instances) cls.limit: # 若个数达到limit说明已满raise Exception(fCan not create instance more than {cls.limit}.)instance super().__new__(cls)time.sleep(1) # 模拟高并发情况cls._instances.append(instance)return instancedef __delete__(self):self._instances.remove(self)def task():LI LimitedInstances()print(LI)def task():LI LimitedInstances()print(LI)for i in range(6):t threading.Thread(targettask, args())t.start() time.sleep(2) print(len(LimitedInstances._instances), LimitedInstances._instances)运行结果出现了6个不同的实例的情况 __main__.LimitedInstances object at 0x0000027066EC8DF0__main__.LimitedInstances object at 0x0000027066EED370__main__.LimitedInstances object at 0x0000027066EC8BB0 __main__.LimitedInstances object at 0x0000027066EED0D0 __main__.LimitedInstances object at 0x0000027066EC8610 __main__.LimitedInstances object at 0x0000027066EED610 6 [__main__.LimitedInstances object at 0x0000027066EC8DF0, __main__.LimitedInstances object at 0x0000027066EED370, __main__.LimitedInstances object at 0x0000027066EC8BB0, __main__.LimitedInstances object at 0x0000027066EED0D0, __main__.LimitedInstances object at 0x0000027066EC8610, __main__.LimitedInstances object at 0x0000027066EED610]解决方式同之前加上线程锁 import time, threadingclass LimitedInstances:限制实例个数的模式————limit实例模式_instances []limit 3_lock threading.Lock()def __new__(cls, *args, **kwargs):with cls._lock: # 一次只能一个线程执行实例个数判断和实例存入if not len(cls._instances) cls.limit: # 若个数达到limit说明已满raise Exception(fCan not create instance more than {cls.limit}.)instance super().__new__(cls)time.sleep(1) # 模拟高并发情况cls._instances.append(instance)return instancedef __delete__(self):self._instances.remove(self)def task():LI LimitedInstances()print(LI)for i in range(6):t threading.Thread(targettask, args())t.start() # time.sleep(2) # print(len(LimitedInstances._instances), LimitedInstances._instances) 运行时创建超过了3个实例会报错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91324.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知名网站建设加工百度指数可以查询多长时间的

当你掌握Java语言到了一定的阶段,或者说已经对Java的常用类和API都使用的行云流水。你会不会有一些思考?比如,这个类是如何设计的?这个方法是怎么实现的?接下来的一系列文章,我们一起学习下Java的一些常见类…

做企业公示的数字证书网站百度搜索排名怎么收费

在我的上一篇博客《Java JDBC学习实战(一): JDBC的基本操作》中,简要介绍了jdbc开发的基本流程,并详细介绍了Statement和PreparedStatement的使用:利用这两个API可以执行SQL语句,完成基本的CURD…

生产企业做网站有用吗网站百度不到

商业竞争激烈,品牌不仅是企业的标志和形象,更是其核心价值和竞争力的体现。然而,企业在品牌推广过程中面临着诸多如缺乏有效的渠道管理、品牌形象模糊以及竞争激烈的市场环境等。这些阻碍着企业的品牌发展和市场占有率的提升。本文将通过企业…

高性能网站建设进行指南深圳vi设计公司全力设计

如果您正在使用Maven构建Java项目,可能是在Eclipse中,或者是通过运行mvn install在命令提示符下构建的,并且构建失败并显示诸如“无效的目标发行版:1.7”或“无效的目标发行版:1.8”之类的错误,那么您来了到…

网站的面包屑怎么做的东莞网页平面设计

刷题建议 刷题建议与debug 代码随想录目前基本都有了视频讲解,一定要先看视频,事半功倍。写博客,将自己的感悟沉淀下来,不然会忘大家提问的时候,记得要把问题描述清楚,自己在哪一步遇到了问题&#xff0c…

文件外链生成网站王也踏青

题面 最小支配集全集-最大独立集 所以先把点权改成正无穷/负无穷来保证强制选/不选某个点到独立集里&#xff0c;然后变成了洛谷的动态DP模板 GTMDNOIP2018ZTY 1 #include<stack>2 #include<cstdio>3 #include<cstring>4 #include<algorithm>5 using n…

网站如何做聚合页面游戏音效设计师培训

<base href>就是指网页里面的相对链接 的前缀url&#xff0c;如在<head></head>部分定义了此链接为http://ent.sina.com.cn/ &#xff0c;那么下面的<a hrefaaa.html></a>代表http://ent.sina.com.cn/aaa.html 这个标签的用处是解决编程时候的相…

广州做网站要多少钱网站建设的作业模板

一、前言 大家好&#xff0c;这里是白泽。有一些同学提问&#xff0c;希望在自己的简历上增加一些有含金量的项目经历&#xff0c;最好能够去参与一些开源项目的开发&#xff0c;但由于对一个庞大的开源项目缺乏认知&#xff0c;难以着手。同时也担心自己能力不足&#xff0c;…

网站模板 音乐济南建设工程交易网

SMB简介&#xff1a; SMB&#xff08;Server Message Block&#xff09;(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议&#xff0c;Linux平台通过samba来支持。SMB最新版本v3.0&#xff0c;在v2.0基础上针对WAN和分布式有改进。 建议使用原版wind…

网站搜索引擎南昌官网seo

如何去除打印时出现的教育版字样&#xff1f;当我们收到甲方提供的建筑图纸时&#xff0c;尤其是设备安装类专业的CAD文件&#xff0c;很多都是教育版&#xff0c;也不知道是为啥。但是作为设计师&#xff0c;打印图纸时出现教育版戳记&#xff0c;那就显得太不专业了&#xff…

太原网站建设推广注册建设网站的公司网站

这道题就是 「BZOJ1070」[SCOI2007]修车 的加强版 如果一开始把全部边连上会T 优化的方法是只连用到过和下一次增广可能用到的边。 1 #include<bits/stdc.h>2 using namespace std;3 const int N50,M110,NN100010,oo1e9;4 int n,m,cost[N][M],tot,s,t,p[N],rank[NN],c[NN…

o2o典型代表网站做企业网站的轻量级cms

前言&#xff1a;在各类网站论坛上,没有找到与工作比较贴切的技能,所以特此写一些对刚步入工作或者工作中没有重视的技能与问题,各位大牛请及时关闭文章.ps1&#xff1a;文中所有标点都是英文的,看官请不要在意.为了便于平时敲代码,所以中文输入法也默认了英文标点(防止各类因为…

dnf可以去哪个网站做代练wordpress如何开启阿里云cdn

上周陪同之前一起工作的同事去面试&#xff08;乔治&#xff0c;小袁&#xff0c;鹏飞&#xff08;面试人&#xff09;&#xff09;&#xff0c;第一站是去深圳&#xff0c;第二站上海&#xff0c;第三站杭州。面试什么公司我在这里就不多说了&#xff0c;你们知道是一线公司就…

企业网站建设硬件德令哈网站建设公司

满意答案pihiac2014.09.05采纳率&#xff1a;45% 等级&#xff1a;7已帮助&#xff1a;460人scanf语句的一般格式如下&#xff1a;scanf("格式字符串", 地址&#xff0c;…);scanf语句用"格式字符串"控制键盘读入的方式。"格式字符串"中一般只…

建设网站是不是要买服务器wordpress仿qq空间

1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。 2 print() 只可以同时输出一个字符串&#xff0c;一个参数,需要圆括号,有返回值,当其执行失败时返flase .prin1 echo(…

比较有名的网站建设平台搜狐网站开发

Go 语言从发布 1.0 版本以来备受众多开发者关注并得到广泛使用&#xff0c;Go 语言的简单、高效、并发特性吸引了众多传统语言开发者的加入&#xff0c;而且人数越来越多。 就目前来看&#xff0c;Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析…

服务器建设一个自己的网站wordpress文章为啥数据库中找不到

文章目录 1. 项目说明1.1 项目特点2. 文件说明2.1 脚本文件2.1.1 `TCP_IP.sln`2.1.2 `xmake.lua`2.1.2.1 编译说明2.1.2.2 运行说明2.1.3 章节说明项目代码已经开源在github上! 微信公众号文章同步发表! 1. 项目说明 根据《TCP/IP网络编程》书籍学习,对其中的代码进行整理,…

网站违法和做网站得有关系17做网店

如果你是mac ,你删除as ,删不干净也正常,你会发现安装的时候,前面的东西也在.配置文件在,会导致你以前的错误不想要的东西都在.废话不多说,复制粘贴就是干!!!!~~~~~~~~第一步: 复制粘贴就是干!!!!~~~~~~~~ 复制到命令行里面,直接回车就OKrm -Rf /Applications/Android\ Studi…

烟台网站排名优化公司哪家好沈阳男科三甲医院排行榜

基本概念和术语&#xff1a; 数据&#xff1a;是描述客观事物的符号&#xff0c;是计算机中可以操作的对象&#xff0c;是能被计算机识别&#xff0c;并输入给计算机处理的符号集合。 数据元素&#xff1a;是组成数据的&#xff0c;具有一定意义的基本单位&#xff0c;在计算机…

淘客网站建设带app梵讯企业网站建设

华为政企42 华为政企 目录 上一篇华为安防监控摄像头下一篇华为企业级无线路由器