[Twisted-Python] Other ways to integrate foreign event loops?
drew.smathers at gmail.com
Tue Apr 1 00:18:57 EDT 2008
On Mon, Mar 31, 2008 at 10:17 PM, <glyph at divmod.com> wrote:
> On 31 Mar, 10:45 pm, nathan.stocks at gmail.com wrote:
> >Is there a way to do the opposite of task.coiterate? I'm using pyglet
> >for my UI, which was working great until I upgraded from pyglet 1.0 to
> >1.1. Now for some reason, the pyglet performance tanked.
> Twisted's job is to run the main loop; it's best just to let it do that.
> If Pyglet slowed down, it would be best to examine what's gone wrong
> with Pyglet and simply submit a fix for that.
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:
dt = clock.tick(True) # polling tick
if w.has_exit and reactor.running:
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:
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)
Or with a set framerate:
\\\\/ // //\/\\\\\\\
\\\/ \\// /\ \/\\\\
\\/ /\/ / /\/ /\ \\\
\/ / /\/ /\ /\\\ \\
/ /\\\ /\\\ \\\\\/\
More information about the Twisted-Python