PracticeDev/study_python/singleton/Singleton_with_new.py

63 lines
1.3 KiB
Python
Executable File

#!/usr/bin/python
#coding=utf8
"""
# Author: songtianlun
# Created Time : 2021-09-26 10:57:39
# File Name: Singleton_with_new.py
# Description:
"""
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)
return Singleton._instance
class SingletonUse1(Singleton):
def __init__(self):
pass
class SingletonUse2(Singleton):
def __init__(self):
pass
obj1 = Singleton()
obj2 = Singleton()
print (obj1, obj2)
def task_singleton(arg):
obj = Singleton()
print("singleton", obj)
def task_singleton_use1(arg):
obj = SingletonUse1()
print("singleton_use_1", obj)
def task_singleton_use2(arg):
obj = SingletonUse2()
print("singleton_use_2", obj)
for i in range(10):
t = threading.Thread(target=task_singleton,args=[i,])
t.start()
for i in range(10):
t = threading.Thread(target=task_singleton_use1,args=[i,])
t.start()
for i in range(10):
t = threading.Thread(target=task_singleton_use2,args=[i,])
t.start()