返回信息流自己写了个版本,在单线程下是正确的。
但是总觉得不能在多线程下正常工作,高手继续支招……
是不是需要用到元类编程啊?最近接触到metaclass,开始直接有点晕了……
class singleton:
__ins = None
def __init__(self):
self.__class__.__ins = self
@classmethod
def getIns(cls):
return cls.__ins
singleton()
if __name__ == '__main__':
a = singleton.getIns()
b = singleton.getIns()
assert a is b
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24252同步于 2008/3/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]怎样实现python下线程安全的singleton模式
ericyosho
2008/3/5镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
搞定搞定了,一直是自己的问题。start_new_thread函数返回的是线程ID,不是执行函数的返回值。
前天试验挂掉,就是因为这个地方搞错了。
还有tkinter库好像是线程不安全的,还是我发现bug了?
用IDLE运行这个代码就会挂
直接用python 的 shell 运行就屡试不爽了……
我贴我贴,我贴贴贴
import thread
class singleton:
__ins = None
def __init__(self):
self.__class__.__ins = self
@classmethod
def getIns(cls):
print str(cls.__ins) #执行的时候就打印出来
return cls.__ins
singleton() #实例化唯一的 instance 对象
if __name__ == '__main__':
for i in range(50):
thread.start_new_thread(singleton.getIns, ())
raw_input() #线程结束自动退出环境,为看结果加的