On 30/09/2010 14:46, Phil Mayers wrote:
> On 30/09/10 14:36, Chris Withers wrote:
>>
>> Indeed, but, as I keep saying, I need to build a scheduler that's
>> resilient to errors in the tasks its running ;-)
>
> Sure.
>
>>
>>>> Most prominent is reactor.callLater.
>>
>> ...which I'm not actually using, it was just a small-as-possible way I
>> could simulate the failure mode (rather than the specific failure) I
>> need to protect against.
>
> Ah.
>
>> Actually, what appears to work is simply changing `loop` to not be an
>> async fuction:
>>
>> def loop():
>> try:
>> doStuff()
>> except Exception,e:
>> log.err(None,'Unhandled scheduled exception')
>>
>> looper = task.LoopingCall(loop)
>> looper.start(1.0)
>> reactor.run()
>>
>> This appears to solve most of the problems:
>> - the schedule now keeps running regardless
>> - exceptions in doStuff and below get logged
>>
>> However, it now has the problem that if doStuff *does* return a deferred
>> and it errbacks, the I get the ugly:
>
> Well, you could do this, which is more Twist-y, and Glyph suggested:
>
> def loop():
> d = defer.maybeDeferred(doStuff, *args)
> d.addErrback(log.err)

Okay, but further down in the call stack of the "real app", I already have:

     @inlineCallbacks
     def sendTransmission(self...):
         ...
         try:
             yield maybeDeferred(feed.initiateTransmission,
                                 ...)
         except Exception, ex:
             if isinstance(ex,GeneratorExit):
                 raise
             ...

Is that not doing what you're talking about?
If it is, it didn't help...

> FWIW, you say "if doStuff does return a deferred"; I presume you don't
> really have a single call returning both normal and deferred values,

Correct, doStuff *should* always return a deferred, the problem is that 
the deferred returned never fires (errback or callback) when an 
exception is raised in the code that should be firing it.

Chris

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

Reply via email to