I have a context manager whose __exit__ method needs to run some asynchronous 
Twisted code. Using Crochet's @wait_for very nearly works:

no_setup()

class Example(object):
    def __exit__(t, v, tb):
            return self.cleanup()

   @wait_for
   @inlineCallbacks
    def cleanup(self):
           yield .....
           returnValue(False)

    ....

Then
     with e as Example():

This gets an error because the cleanup function is being called in the reactor 
thread. Using reactor.callInThread(self.cleanup()) makes it work up to a point, 
but it doesn't wait for the thread to finish. Is there a way to make this work? 
The alternative is simply to call the cleanup function explicitly from the with 
statement, and have the __exit__ handler throw an error if you forget. So any 
solution needs to be cleaner than that, or there's no point. I'm beginning to 
suspect that this is the case!

Peter.

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to