Async как шаблон в pyqt? Или более чистый фоновый рисунок?

Я пытаюсь написать короткую (один файл pyqt) программу, которая отзывчива (поэтому зависимости вне python / lxml / qt, особенно те, которые я не могу просто вставить в файл, имеют некоторые недостатки для этого варианта использования, но я все еще могу готов попробовать их). Я пытаюсь выполнить, возможно, длительные (и отменяемые) операции в рабочем потоке (на самом деле фоновая операция имеет блокировку вокруг нее для предотвращения одновременного выполнения нескольких операций (поскольку используемая библиотека может использоваться только по одному вызову за раз) и тайм-ауты, так что порождение нескольких потоков также будет хорошо).

Насколько я могу понять, «основной» способ сделать это с помощью Qt. (код заметки не проверен, поэтому может быть ошибочным)

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())

(Я правильно использую QTimer (он работает на другом потоке справа)?)

Я действительно предпочел бы иметь что-то более простое и более абстрактное в соответствии с асинхронностью c #. (обратите внимание, я не использовал asyncio, поэтому я могу ошибаться)

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)

Я слышал, что Python 3 имеет схожие функции и есть задний порт, но работает ли он правильно с qt?

Если кто-нибудь знает другой разумный образец. это тоже было бы полезно / приемлемый ответ.

Ответы на вопрос(4)

Ваш ответ на вопрос