首先是个线程类
class MyThread(threading.Thread):
allName = []
def __init__(self):
threading.Thread.__init__(self)
def run(self):
pass
def printMyName(self, nm):
self.allName.append(nm)
for n in self.allName:
print n
然后有个类会回调用该函数,类似观察者模式
class OB
funPtr = []
def __init__(self):
print "请不要初始化该类"
@classmethod
def registerPtr(cls, ptr):
funPtr.append(ptr)
@classmethod
def callBackPtr(cls, nm):
for ptr in cls.funPtr:
ptr(nm)
然后 OB 类回不断有下列调用
A = MyThread()
OB.register(A.printMyName)
A.start()
# 线程运行结束
OB.callBackPtr("Jack") # 这个调用时,线程类对象 A 已经运行完了
我想问下,这种情况下,线程 A 的 run 函数以及跑完的情况下,OB 类再调用对象 A 的 printMyName ()安全吗?
另外我想了一个方案,测试可行,但我不确定是否有问题,首先再 OB 类加了一个 unregister()函数
@classmethod
def unregister(cls, ptr):
index = -1
for p int cls.funPtr:
if p == ptr:
break
index += 1
if index != -1:
del cls.funPtr[index]
然后在线程的 run 函数最后加一句
OB.unregister(self.printMyName)