2010-09-30 89 views
0

我確信這不是一個非常pythonic的情況。但是我沒有在任何生產代碼中實際使用這個,我只是在考慮如何(如果?)這可以工作。它不一定是python特定的,但我想要一個解決方案,至少在python框架內工作。通過單例對象強制中斷線程之間的中斷(學術)

基本上,我有一個實現了線程安全的singleton對象__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 

但是,這顯然不會引發其他線程中的異常。我接下來想到的是,由於進入和退出方法獲得一個類變量鎖,有什麼方法可以在Lock上調用,這會導致獲取它的線程拋出異常?

或者,我可能會在C++中做的只是刪除this或以某種方式從本身調用對象的析構函數。有沒有辦法在Python中做到這一點?我知道如果有可能,這將是一個徹頭徹尾的黑客工作。但是,這又是一個思想實驗。

回答