代码之家  ›  专栏  ›  技术社区  ›  Falmarri

通过单个对象在线程之间强制中断(academic)

  •  0
  • Falmarri  · 技术社区  · 15 年前

    我相信这不是一个很严重的蟒蛇的情况。但实际上我并没有在任何生产代码中使用它,我只是在考虑如何(如果?)这是可行的。它不必是Python特定的,但我希望至少在Python框架内工作的解决方案。

    基本上,我有一个线程安全的singleton对象来实现 __enter__ __exit__ (因此它可以与 with .

    
    Singleton():
        l = threading.Lock()
        __enter__():
            l.acquire()
        __exit__():
            l.release()
    

    在我的示例中,一个线程获取单例,并且在 具有 语句它进入无限循环。

    
    def infinite():
        with Singleton():
            while True:
                pass
    

    这个实验的目的是获得 infinite 在不杀死线程的情况下从无限循环中线程退出。专门使用singleton对象。首先,我考虑使用一个从不同线程调用的异常:

    
    Singleton():
        ....
        def killMe():
            raise exception
    

    但这显然不会在另一个线程中引发异常。接下来我想的是,由于enter和exit方法获得了一个类变量锁,是否有任何方法可以在 Lock 这会导致获得它的线程抛出异常吗?

    或者,我可能在C++中做的就是删除 this 或者从自身调用对象的析构函数。在python中有什么方法可以做到这一点吗?我知道如果可能的话,这将是一个完全的黑客工作。但是,这基本上是一个思想实验。