Da quello che ho capito di twistato, non dovrebbe essere bloccato nulla nel thread del reattore. Tutte le attività di blocco devono essere delegate ad altri thread, per richiamare i callback nel thread del reattore quando hanno finito.twisted + gtk: dovrei eseguire le cose della GUI nei thread o nel thread del reattore?
Questo vale anche per le cose con gtk? Ad esempio, desidero visualizzare un messaggio "connessione non riuscita" se la connessione ... non è riuscita. Faccio:
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()
o:
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)
o:
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)
?
MODIFICA: Ooh ok, gli ultimi due sono davvero incasinati. quindi immagino che la risposta sia la prima. Quindi la mia domanda è: perché? Sembra che questo bloccherebbe il filo del reattore.
ah che ha più senso. Avevo il sospetto che avesse qualcosa a che fare con 'run()'. i differiti sono sicuramente la strada da percorrere. – Claudiu