Au lieu d'exécuter reactor.run(), je voudrais appeler quelque chose d'autre (je ne sais pas, comme reactor.runOnce() ou quelque chose) de temps en temps tout en conservant ma propre boucle principale. Y at-il une meilleure pratique pour cela avec tordu?Quelle est la meilleure façon de contrôler le réacteur de Twisted pour qu'il ne soit pas bloqué?
Répondre
Oui. La meilleure pratique est que c'est une mauvaise idée, et que vous n'avez jamais vraiment besoin de le faire. Cela ne fonctionne pas avec tous les réacteurs, et vous ne pouvez certainement pas avoir deux bibliothèques différentes qui veulent le faire. Pourquoi avez-vous besoin de gérer votre propre boucle principale? Les chances sont, c'est quelque chose comme "Je veux travailler avec PyGame" ou "J'écris un programme graphique et je veux utiliser le circuit principal de GTK" ou "J'utilise Twisted depuis Blender et il a sa propre gestion des événements". Si c'est le cas, vous devriez poser cette question spécifique, car chacune d'entre elles a sa propre réponse.
Si vous absolument besoin de faire cela (et, encore une fois: vous n'avez pas) la façon de le faire est d'appeler reactor.iterate()
périodiquement. Ce sera lent, la gestion du signal de rupture, et ont une sémantique bancale par rapport à reactor.stop()
. Cela introduira beaucoup de bogues dans votre programme qui ne seraient pas là autrement, et quand vous avez besoin d'aide pour les diagnostiquer, si vous demandez à quelqu'un de l'équipe de développement Twisted, la première chose qu'ils vous diront est de cesser de faire ça. pas besoin de le faire ".
Je travaille avec pyglet. C'est trop méchant tordu c'est comme ça; cela semble rendre les choses tellement plus faciles, mais pas ce que je veux faire. Vous avez probablement raison de dire que je n'ai pas besoin d'écrire mon programme en dehors du paradigme du réacteur.run de twisted, mais cela ne change rien au fait que ce ne serait pas une solution très élégante pour moi. Je préférerais écrire ma propre suite de communication de bas niveau à nouveau. – shino
Cela signifie simplement que vous voulez pygletreactor: http://code.google.com/p/pyglet-twisted/ –
Attendez - y at-il un moyen d'utiliser pyglet réacteur afin que je ne suis pas dans un modèle axé sur les événements? Je ne le vois pas, mais ce serait parfait. – shino