[Twisted-Python] stopping LoopCall and check if running

Stephan schenette at gmail.com
Mon Sep 5 19:50:28 MDT 2011


I have a question on LoopCall.

I have a process that uses a sequence of LoopCalls, once one finishes
I call the next to check for the next critical event to continue:

e.g.

   def checkForAvailableProfile(self):
       profile = fs_profiles_manager.get_next_available_profile()
       if profile is None:
           return
       else:
           self.checkForAvailableProfileLoop.stop()

       self.profile = profile

       logging.debug("using profile: %s", self.profile['name'])

       self.ff = FirefoxProcess(self.profile, self.params)
       self.ff.run()

       self.checkForEventsFileLoop =
LoopingCall(self.checkIfEventsFileExists)
       self.checkForEventsFileLoop.start(0.5)
       self.state = self.STATE_WAIT_FOR_EVENTS

====================================================

The problem is that I'm getting errors, errors when I try to call stop
when stop perhaps has already been called.
I want advice on how to manage LoopCalls. So far I'm using state variables.
e.g.
self.state = self.STATE_WAIT_FOR_EVENTS

if something goes haywire or if the process is done I have a function
that cleans up all the LoopCalls so it's not checking constantly:

   def cleanExit(self):
       if self.state == self.STATE_WAIT_FOR_PROFILE:
           self.checkForAvailableProfileLoop.stop()
       elif self.state == self.STATE_WAIT_FOR_EVENTS:
           self.checkForEventsFileLoop.stop()
       elif self.state == self.STATE_WAIT_FOR_PROC_KILLED:
           self.checkIfFirefoxWasKilledLoop.stop()

       self.ff.cleanExit()


the above code is what I believe is causing my exceptions, but how
else do I check for the LoopCalls?



=====================================================

2011-08-31 12:30:11-0700 [FiresharkProtocol,1278,127.0.0.1] Unhandled Error
   Traceback (most recent call last):
     File "/usr/lib/python2.6/dist-packages/twisted/application/app.py",
line 348, in runReactorWithLogging
       reactor.run()
     File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py",
line 1170, in run
       self.mainLoop()
     File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py",
line 1182, in mainLoop
       self.doIteration(t)
     File
"/usr/lib/python2.6/dist-packages/twisted/internet/selectreactor.py",
line 140, in doSelect
       _logrun(selectable, _drdw, selectable, method, dict)
   --- <exception caught here> ---
     File "/usr/lib/python2.6/dist-packages/twisted/python/log.py",
line 84, in callWithLogger
       return callWithContext({"system": lp}, func, *args, **kw)
     File "/usr/lib/python2.6/dist-packages/twisted/python/log.py",
line 69, in callWithContext
       return context.call({ILogContext: newCtx}, func, *args, **kw)
     File "/usr/lib/python2.6/dist-packages/twisted/python/context.py",
line 59, in callWithContext
       return self.currentContext().callWithContext(ctx, func, *args, **kw)
     File "/usr/lib/python2.6/dist-packages/twisted/python/context.py",
line 37, in callWithContext
       return func(*args,**kw)
     File
"/usr/lib/python2.6/dist-packages/twisted/internet/selectreactor.py",
line 156, in _doReadOrWrite
       self._disconnectSelectable(selectable, why, method=="doRead")
     File "/usr/lib/python2.6/dist-packages/twisted/internet/posixbase.py",
line 194, in _disconnectSelectable
       selectable.connectionLost(f)
     File "/usr/lib/python2.6/dist-packages/twisted/internet/tcp.py",
line 519, in connectionLost
       protocol.connectionLost(reason)
     File "/usr/sbin/fireshark.py", line 101, in connectionLost
       self.cleanExit()
     File "/usr/sbin/fireshark.py", line 43, in cleanExit
       self.checkIfFirefoxWasKilledLoop.stop()
     File "/usr/lib/python2.6/dist-packages/twisted/internet/task.py",
line 171, in stop
       assert self.running, ("Tried to stop a LoopingCall that was "
   exceptions.AssertionError: Tried to stop a LoopingCall that was not
running.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20110905/1ac36d49/attachment.html>


More information about the Twisted-Python mailing list