Anstatt reactor.run() auszuführen, möchte ich gelegentlich etwas anderes (ich weiß nicht, wie reactor.runOnce() oder etwas) gelegentlich aufrufen, während ich meine eigene Hauptschleife beibehalte. Gibt es dafür eine Best-Practice mit Twisted?Was ist der beste Weg, den Reaktor von Twisted so zu steuern, dass er nicht blockiert?
Antwort
Ja. Die beste Vorgehensweise ist, dass dies eine schlechte Idee ist und dass Sie es nie wirklich tun müssen. Es funktioniert nicht mit allen Reaktoren, und Sie können sicherlich nicht zwei verschiedene Bibliotheken haben, die dies tun wollen.
Warum brauchen Sie Ihre eigene Hauptschleife? Wahrscheinlichkeiten sind, es ist etwas wie "Ich möchte mit PyGame arbeiten" oder "Ich schreibe ein GUI-Programm und ich möchte GTK's Hauptschleife verwenden" oder "Ich benutze Twisted aus Blender und es hat seine eigene Event-Handhabung". Wenn dies der Fall ist, sollten Sie diese spezifische Frage stellen, da jede von ihnen ihre eigene Antwort hat.
Wenn Sie absolut dies tun müssen (und wiederum: Sie nicht), ist es ratsam, reactor.iterate()
regelmäßig zu rufen. Dies wird langsam sein, Break-Signal-Handhabung und haben wonky Semantik in Bezug auf reactor.stop()
. Es wird viele Bugs in dein Programm einführen, die sonst nicht vorhanden wären. Wenn du Hilfe bei der Diagnose benötigst, wenn du jemanden im Twisted-Entwicklerteam fragst, ist das erste, was er dir sagt, "hör auf damit, du nicht 't müssen es tun ".
Ich arbeite mit Pyglet. Es ist schade, so verdreht ist das; es scheint die Dinge so viel einfacher zu machen, nur nicht das, was ich tun möchte. Sie haben wahrscheinlich Recht, dass ich mein Programm nicht außerhalb von twisted reactor.run paradigma schreiben muss, aber das ändert nichts an der Tatsache, dass es für mich keine sehr elegante Lösung wäre. Ich würde lieber meine eigene Low-Level-Komm-Suite schreiben, als sich darum zu kümmern. – shino
Dies bedeutet nur, dass Sie pygletreactor wollen: http://code.google.com/p/pyglet-twisted/ –
Warten - gibt es eine Möglichkeit, Pyglettreaktor zu verwenden, so dass ich nicht in einem ereignisgesteuerten Modell bin? Ich sehe es nicht, aber das wäre perfekt. – shino