63 lines
1.3 KiB
Python
Executable File
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()
|
|
|
|
|