通过单个对象强制线程之间的中断(学术)

时间:2010-09-30 18:28:36

标签: python singleton multithreading

我确信这不是一个非常pythonic的情况。但我实际上并没有在任何生产代码中使用它,我只是考虑如何(如果?)这可以工作。它不一定是python特定的,但我想要一个至少在python框架内工作的解决方案。

基本上,我有一个实现__enter____exit__的线程安全单例对象(因此它可以与with一起使用。


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

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


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

这个实验的目标是让infinite线程脱离其无限循环而不杀死线程。特别是使用Singleton对象。首先,我考虑使用从不同线程调用的异常:


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

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

或者,我在C ++中可能会做的只是删除this或以某种方式调用对象的析构函数。在python中有没有办法做到这一点?我知道,如果可能的话,这将是一个彻底的黑客工作。但同样,这基本上是一个思想实验。

1 个答案:

答案 0 :(得分:1)

在Python中,虽然有一些警告,但在另一个线程中有一种无法记录的异常方法。请参阅此配方中的“可填充线程”:

http://code.activestate.com/recipes/496960-thread2-killable-threads/

http://sebulba.wikispaces.com/recipe+thread2