Von dem, was ich über verdreht verstehe, sollte nichts im Reaktor Thread blockieren. Alle blockierenden Aktivitäten sollten an andere Threads delegiert werden, um Callbacks in den Reaktor-Thread zurück zu schreiben, wenn sie fertig sind.twisted + gtk: sollte ich GUI-Dinge in Threads oder im Reaktor Thread laufen lassen?
Also gilt das auch für GTK-Dinge? Ich möchte zum Beispiel eine Meldung "Verbindung fehlgeschlagen" anzeigen, wenn die Verbindung fehlgeschlagen ist. Muss ich tun:
def connectionFailed(self, reason):
dlg = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
buttons=gtk.BUTTONS_CLOSE,
message_format="Could not connect to server:\n%s" % (
reason.getErrorMessage()))
dlg.run()
oder:
def connectionFailed(self, reason):
dlg = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
buttons=gtk.BUTTONS_CLOSE,
message_format="Could not connect to server:\n%s" % (
reason.getErrorMessage()))
reactor.callInThread(dlg.run)
oder:
def connectionFailed(self, reason):
def bloogedy():
dlg = gtk.MessageDialog(type=gtk.MESSAGE_ERROR,
buttons=gtk.BUTTONS_CLOSE,
message_format="Could not connect to server:\n%s" % (
reason.getErrorMessage()))
dlg.run()
reactor.callInThread(bloogedy)
?
EDIT: Ooh ok, die letzten beiden wirklich durcheinander. also denke ich, die Antwort ist die erste. Dann ist meine Frage: warum? Es scheint, als würde dies den Reaktorfaden blockieren.
ah beginnt, die mehr Sinn macht. Ich ahnte, dass es etwas mit 'run()' zu tun hatte. Defereds sind definitiv der richtige Weg. – Claudiu