Я бы не сказал, что это "хорошая идея". Вы должны просто запустить реактор и графический интерфейс в одном потоке с wxreactor.
Описанный г-ном Шредером подход, основанный на таймере управляемой петли событий, является наихудшим из возможных отказоустойчивых способов реализации интеграции петли событий. Если вы используете wxreactor
(не wxsupport
), Twisted теперь использует подход, при котором мультиплексирование отключается внутри потока, так что ничто не требует использования таймера. Еще лучше было бы, чтобы wxpython выставил wxSocket
и попросил кого-нибудь основать на нем реактор.
Однако, если вы настроены на использование отдельного потока для связи с Twisted, следует помнить, что вы можете использовать объекты, которые происходят из любого потока, в качестве значения, передаваемого Deferred.callback
Вы должны звонить Deferred.callback
только в самом потоке реактора. Отсроченные не потокобезопасны; благодаря некоторым утилитам отладки, даже Deferred
класс не является поточно-ориентированным, поэтому вы должны быть очень осторожны, когда используете их, чтобы никогда не покидать основной поток Twisted. т.е. когда у вас есть результат в потоке пользовательского интерфейса, используйте reactor.callFromThread(myDeferred.callback, myresult)
.