Padrão assíncrono em pyqt? Ou padrão de chamada de fundo mais limpo?

Estou tentando escrever um programa curto (um arquivo pyqt) que seja responsivo (portanto, dependências fora do python / lxml / qt, especialmente aquelas que não posso ficar no arquivo, têm algumas desvantagens neste caso de uso, mas ainda posso estar disposto a experimentá-los). Estou tentando executar operações possivelmente longas (e canceláveis) em um thread de trabalho (na verdade, a operação em segundo plano tem um bloqueio ao redor para impedir várias operações de uma só vez (já que a biblioteca usada apenas pode ser usada uma chamada por vez) e timeouts, então gerar vários threads também seria bom).

Tanto quanto eu posso descobrir a maneira "básica" de fazer isso com o qt é. (o código da nota não foi testado, pode estar errado)

class MainWindow(QWidget):
    #self.worker moved to background thread
    def initUI(self):
        ...
        self.cmd_button.clicked.connect(self.send)
        ...

    @pyqtslot()
    def send(self):
        ...
        ...#get cmd from gui
        QtCore.QTimer.singleShot(0, lambda : self.worker(cmd))


    @pyqtslot(str)
    def end_send(self, result):
        ...
        ...# set some gui to display result
        ...



class WorkerObject(QObject):    
   def send_cmd(self, cmd):
       ... get result of cmd
       QtCore.QTimer.singleShot(0, lambda: self.main_window.end_send())

(Estou usando o QTimer certo (ele roda em um thread diferente à direita)?)

Eu realmente preferiria ter algo mais simples e mais abstrato ao longo das linhas do assíncrono do c #. (note que eu não usei o assíncio, por isso posso estar errado)

class MainWindow(QWidget):
    ...
    @asyncio.coroutine
    def send(self):
        ...
        ...#get cmd from gui
        result = yield from self.worker(cmd)
        #set gui textbox to result

class WorkerObject(QObject):
   @asyncio.coroutine
   def send_cmd(self, cmd):
       ... get result of cmd
       yield from loop.run_in_executor(None, self.model.send_command, cmd)

Ouvi dizer que o python 3 tinha recursos semelhantes e havia uma porta traseira, mas funciona corretamente com o qt?

Se alguém souber de outro padrão mais saudável. isso também seria útil / uma resposta aceitável.

questionAnswers(4)

yourAnswerToTheQuestion