[Twisted-Python] how manual run LoopingCall.f

ploutosss ploutosss ploutosss at gmail.com
Mon Dec 28 06:05:05 MST 2009


I use _threadedselect reactor. My waker its one line:
eventmodule.post(eventmodule.Event(TWISTEDEVENT, iterateTwisted=func))
its send event, to pygame queue.
My pygame loop:
class PygameController(object):
   _tick = Tick()
    def _eventIterator(self):
        while True:
            if self._ticking:
                yield eventmodule.poll()
            else:
                yield eventmodule.wait()
    def run(self):
        for event in self._eventIterator():
            if event.type == NOEVENT:
                self.manager.post(self._tick)
                continue
            elif event.type == TWISTEDEVENT:
                event.iterateTwisted()
                if not reactor.running:
                    break
                continue
    ...
When I need to quickly perform some function, I set the parameter
PygameController._ticking to True, and my manager call some function.
Its work.
When I need to perform some function with a time interval of more than
one second, I use LoopingCall. Its work.
When I need to perform some function with a time interval of less than
one second, LoopingCall too slow. I try use my ticking, but for
function is not executed too often, I used the following code:

    def some_function(self):
        looping_instance = self.looping
        call = looping_instance.call
        if call and call.time - call.seconds() <= 0:
            looping_instance()

but I get this traceback when I stop looping (LoopingCall.stop()):
  File "/usr/lib64/python2.6/site-packages/twisted/internet/base.py",
line 779, in runUntilCurrent
    call.func(*call.args, **call.kw)
  File "/usr/lib64/python2.6/site-packages/twisted/internet/task.py",
line 196, in __call__
    d.addErrback(eb)
  File "/usr/lib64/python2.6/site-packages/twisted/internet/defer.py",
line 199, in addErrback
    errbackKeywords=kw)
  File "/usr/lib64/python2.6/site-packages/twisted/internet/defer.py",
line 181, in addCallbacks
    self._runCallbacks()
--- <exception caught here> ---
  File "/usr/lib64/python2.6/site-packages/twisted/internet/defer.py",
line 323, in _runCallbacks
    self.result = callback(self.result, *args, **kw)
  File "/usr/lib64/python2.6/site-packages/twisted/internet/task.py",
line 191, in eb
    d.errback(failure)
exceptions.AttributeError: 'NoneType' object has no attribute 'errback'




More information about the Twisted-Python mailing list