V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
QBugHunter
V2EX  ›  Python

Python2.7 线程结束后的函数调用

  •  
  •   QBugHunter · 2021-04-01 18:00:28 +08:00 · 1494 次点击
    这是一个创建于 1340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先是个线程类

    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)
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   872 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:14 · PVG 05:14 · LAX 13:14 · JFK 16:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.