Hi,

I just wanted to give an update about the way I got it, in case this could be useful for somebody.
I essentially inherited from service.MultiService like this:

class GracefulMultiService(service.MultiService):

    def stopService(self):
        d = defer.succeed(None)
        d.addCallback(self._wait_for_your_cleanup_code_to_complete)
        d.addCallback(lambda _: self)
        d.addCallback(service.MultiService.stopService)
        return d

  @defer.inlineCallbacks
  def _wait_for_your_cleanup_code_to_complete(self):
        [...]
        yield sleep(10)  # cleanup code example


def sleep(secs):
    d = defer.Deferred()
    reactor.callLater(secs, d.callback, None)
    return d




Thanks again for your help!


On Thu, Sep 4, 2014 at 2:55 PM, <exarkun@twistedmatrix.com> wrote:
On 12:36 pm, sangiovanni@nweb.it wrote:
On Thu, Sep 4, 2014 at 2:02 PM, <exarkun@twistedmatrix.com> wrote:


You said before shutdown triggers are too late but you didn't say why. I
think that's based on a misunderstanding - but if not, then explain why it
doesn't work for your scenario.

Hi, thanks for your reply.

I've tried the following:

def sleep(secs):
   log.msg('from within trigger')
   d = defer.Deferred()
   reactor.callLater(secs, d.callback, None)
   return d

reactor.addSystemEventTrigger('before', 'shutdown', sleep, 10)

All 'before' trigger are run concurrently.  If you're using `Application` then your `sleep` trigger runs concurrently with the application's `stopService` trigger (because `Application` has its stopService added as another 'before' shutdown' trigger alongside yours).

If you want to delay your application shutdown, you need to cooperate a little more closely with it.  Either attach your application shutdown code as a callback to the sleep Deferred or move the sleep into the stopService implementation of one of the services on your application and trigger the remaining stopService calls (eg the stopService call on the MultiService you mentioned) when the sleep Deferred fires there.

Jean-Paul


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




--
Fabio Sangiovanni | System Integrator
T +39 0372 24525  F +39 0372 800725
Via Dei Comizi Agrari 10, 26100 Cremona - Italia

Milano - Cremona - San Francisco
MailUp® La soluzione per l'invio di email e SMS mailup.it