Как правильно использовать Qt4Reactor?
У меня есть приложение PyQt4, на котором запущен Scrapy для анализа веб-сайта и отображения результатов в пользовательском интерфейсе.
Когда пользователь нажимает кнопку, парсер запускается в другом процессе. Пользовательский интерфейс блокируется, и парсер работает. Когда парсер завершен, данные отображаются в пользовательском интерфейсе. Что я хочу, так это неблокирующий пользовательский интерфейс, когда работает Scrapy.
Поскольку Scrapy построен на основе Twisted, мне приходится использовать новый процесс вместо потока, чтобы запустить его из пользовательского интерфейса.
Мой вопрос: как максимально упростить неблокирующий пользовательский интерфейс?
Я пытался использовать Qt4Reactor следующим образом:
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
import qt4reactor
qt4reactor.install()
MainWindow = DiscogsRenamer()
MainWindow.show()
sys.exit(app.exec_())
reactor.runReturn()
Это приводит к ошибке:
Traceback (most recent call last):
File "/home/f/work/py/discogs_renamer/main.py", line 224, in <module>
qt4reactor.install()
File "/usr/local/lib/python2.7/dist-packages/qt4reactor.py", line 338, in posixinstall
installReactor(p)
File "/usr/local/lib/python2.7/dist-packages/twisted/internet/main.py", line 32, in installReactor
raise error.ReactorAlreadyInstalledError("reactor already installed")
twisted.internet.error.ReactorAlreadyInstalledError: reactor already installed
Я разместил еще один вопрос в этой теме: Интеграция цикла событий Scrapy/Twisted в основном цикле PyQt4
Заранее спасибо.