线程锁在单例模式中的应用

多个线程在执行过程中会因为竞争同一个资源而产生线程冲突,造成死锁,从而引出线程锁这个概念

先拿到锁再执行业务操作:

当然我对这一块了解的还不透彻,只是了解在不加锁的多线程情况下,会破坏单例模式,所以就有了下面这一段

 1 import time
 2 import threading
 3 
 4 
 5 def decorator(func):
 6     lock = threading.Lock()
 7 
 8     def wrapper(*args, **kwargs):
 9         with lock:
10             func(*args, **kwargs)
11 
12     return wrapper
13 
14 
15 class Singleton(type):
16     def __init__(self, *args, **kwargs):
17         super(Singleton, self).__init__(*args, **kwargs)
18         self._instance = None
19 
20     @decorator
21     def __call__(self, *args, **kwargs):
22         if self._instance is None:
23             time.sleep(1)
24             self._instance = super(Singleton, self).__call__(*args, **kwargs)
25         return self._instance
26 
27 
28 class Valley(metaclass=Singleton):
29     ...
30 
31 
32 def create():
33     v = Valley()
34     print(id(v))
35 
36 
37 if __name__ == '__main__':
38     for i in range(5):
39         t = threading.Thread(target=create)
40         t.start()

output:

  140709207779456

  140709207779456

  140709207779456

  140709207779456

  140709207779456

 希望看到的人能多给我讲讲线程锁的应用场景,最后愿口罩下的我们、裁员下的我们,每天都有盼头

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:线程锁在单例模式中的应用 - Python技术站

(0)
上一篇 2023年4月2日 下午4:22
下一篇 2023年4月2日

相关文章

  • fastapi篇(一)

    fastapi是一个高性能的web开发框架 性能极高,可与 NodeJS, Go 媲美。(得益于Starlette和Pydantic)。 Starlette 是一个轻量级 ASGI 框架/工具包。它非常适合用来构建高性能的 asyncio 服务,并支持 HTTP 和 WebSockets。 官方网址:https://www.starlette.io/   P…

    python 2023年5月9日
    00
  • 工匠回忆(一)

    不久之前看过《python工匠》,腾讯大佬朱磊写的,后来一段时间零零散散也会翻开看看,强烈推荐!!! 1、变量注释   变量与注释是最接近自然语言的东西,把变量与注释搞好,同样一段代码,却带来两种截然不同的体验   1.1、变量开辟的必要性   1.2、变量注意靠近使用   1.3、注意变量描述性要强、同时注意其长度   1.4、变量的命名要突出类型   1…

    python 2023年5月4日
    00
  • 方法的多种调用方式

      方法调用确实我们每个人都会,但是我觉得大家可能用的最多的就是那种常规的方式,这里呢,我要记录一下另外几种方式 1 from operator import attrgetter 2 from operator import methodcaller 3 4 5 class Valley: 6 def func(self): 7 print(“测试方法”)…

    Python开发 2023年4月2日
    00
  • 循环优化一

    主角:takewhile   判断序列中元素是否为偶数,奇数则终止 这是我们最常用的一种方式,其实没必要这么复杂 1 a = [4, 6, 7, 3] 2 3 4 def judge_is_even(item): 5 if item % 2 == 0: 6 return True 7 return False 8 9 10 # 最常用 11 for item…

    Python开发 2023年4月2日
    00
  • 装饰器的多种实现方式

    一、基于函数实现   1、嵌套函数   代码实现: 1 from functools import wraps 2 3 4 def decorator(param): 5 def wrapper(func): 6 @wraps(func) 7 def verify(*args, **kwargs): 8 if param == ‘g’: 9 print(“&…

    Python开发 2023年4月2日
    00
  • 状态机的实现

    代码里我们经常会出现大量的条件判断,在这种情况下,我们可以实现状态机避免过度使用 有一种方式是把各种状态归为各种状态类 还有一种方式是修改实例的__class__属性 1 “”” 2 状态机的实现 3 修改实例的__class__属性 4 “”” 5 6 7 class Connection: 8 def __init__(self): 9 self.new…

    Python开发 2023年4月2日
    00
  • 派生类中扩展属性

    对于在父类中存在的属性,如果要在其派生类中继续扩展属性   可以这样实现 1 class Valley: 2 def __init__(self): 3 self._name = None 4 5 @property 6 def name(self): 7 return self._name 8 9 @name.setter 10 def name(self…

    Python开发 2023年4月2日
    00
  • 浅用描述符

      可以理解为property方法的一种进阶,都可以用来创建一种新形式的实例属性,即在实例属性值的获取和设定上,增加额外的处理事务,such as:类型检查、验证   重写三个属性访问方法,其中__delete__方法是否重写取决需求   在类层次上引用描述符,即该类遵从描述符协议 1 class Check: 2 def __init__(self, na…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部