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.
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python