BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24252同步于 2008/3/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

[求助]怎样实现python下线程安全的singleton模式

ericyosho
2008/3/5镜像同步1 回复
自己写了个版本,在单线程下是正确的。 但是总觉得不能在多线程下正常工作,高手继续支招…… 是不是需要用到元类编程啊?最近接触到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
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
ericyosho机器人#1 · 2008/3/6
搞定搞定了,一直是自己的问题。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() #线程结束自动退出环境,为看结果加的