[Twisted-Python] Other ways to integrate foreign event loops?

Nathan nathan.stocks at gmail.com
Tue Apr 1 16:00:39 MDT 2008


On Mon, Mar 31, 2008 at 10:18 PM, Drew Smathers <drew.smathers at gmail.com> wrote:
>  Yeah, I've experienced some performance issues with pyglet's
>  app.runtime (maybe Linux-specific or something).  Given the time, I'll
>  submit a meaningful bug report concerning this.  Regarding integration
>  with Twisted, though, I think the best thing to do (for now) is to
>  just ignore pyglet.app.runtime and write a pump function, roughly:
>
>  def pump():
>     dt = clock.tick(True) # polling tick
>     w.clear()
>     w.dispatch_events()
>     ...
>     w.flip()
>     if w.has_exit and reactor.running:
>         reactor.stop()
>
>  Be sure to call clock.tick(True) - since clock.tick will otherwise
>  block.  The next thing to do is customize clock where appropriate -
>  that is, to used Twisted's scheduling functions.  Coincidentally, I
>  did this about 45 minutes ago for a project I'm working on:
>
>  http://hg.enterthefoo.com/roboto/file/db931f29b98e/roboto/clock.py
>
>  Beware - the above is half-baked and written under the influence of
>  Hobgoblin Dark English Ale.
>
>  Finally, you need schedule the pump function.  To do it as fast as possible:
>
>     from twisted.internet import task
>     gameLoop = task.LoopingCall(pump)
>     gameLoop.start(0., True)
>     reactor.run()
>
>  Or with a set framerate:
>    ...
>    gameLoop.start(1/60., True)

Thanks for the great advice.  I implemented it all and it runs, but
unfortunately there was no noticeable change (for better or worse) to
pyglet's performance.  I'm currently working on setting up a
stripped-down twisted+pyglet example that reproduces the problem.
I'll post it when I get it up and running.

~ Nathan




More information about the Twisted-Python mailing list