开发者

Forcing an interrupt between threads through a singleton object (academic)

I'm sure this is not a very pythonic situation. But I'm not actually using this in any production code, I'm just considering how (if?) this could work. It doesn't have to be python specific, but I'd like a solution that at least WORKS within python framework.

Basically, I have a thread safe singleton object that implements __enter__ and __exit__ (so it can be used with with.


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

In my example, one thread gets the singleton, and inside the with statement it enters an infinite loop.


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

The goal of this experiment is to get the infinite thread out of its infinite loop WITHOUT killing the thread. Specifically using the Singleton object. First I was thinking of using an exception called from a different thread:


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

But this obviously doesn't raise t开发者_StackOverflow中文版he exception in the other thread. What I thought next is that since the enter and exit methods acquire a class variable lock, is there any method that can be called on the Lock that will cause the thread that has acquired it to throw an exception?

Or, what I would probably do in C++ is just delete this or somehow call the destructor of the object from itself. Is there ANY way to do this in python? I know that if it's possible it will be a total hack job. But again, this is basically a thought experiment.


In Python, there is a somewhat undocumented way of raising an exception in another thread, though there are some caveats. See this recipe for "killable threads":

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

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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜