Я пытаюсь создать приложение на Python с использованием PyQt, которое может извлекать сгенерированное содержимое списка URL-адресов и обрабатывать извлеченный источник с помощью нескольких потоков. Мне нужно запустить около десяти QWebViews одновременно. Как бы нелепо это ни звучало, когда речь идет о сотнях URL-адресов, использование многопотоковых QWebView дает результаты в 3 раза быстрее, чем обычно.
Вот тестовый код, с которым у меня возникли проблемы...
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
class Worker(QThread):
def __init__(self, url, frame):
QThread.__init__(self)
self.url = url
self.frame = frame
def run(self):
self.frame.load(QUrl(self.url))
print len(self.frame.page().mainFrame().toHtml())
app = QApplication(sys.argv)
webFrame = QWebView()
workerList = []
for x in range(1):
worker = Worker('http://www.google.com', webFrame)
workerList.append(worker)
for worker in workerList:
worker.start()
sys.exit(app.exec_())
Выше я попытался инициализировать QWebView в основном QApplication только для того, чтобы получить:
QObject: Cannot create children for a parent that is in a different thread.
Затем я попытался инициализировать QWebView в QThread; но затем QWebView оставался неизменным и пустым, не выводя никаких ошибок или чего-либо еще. Вероятно, это произошло из-за ошибки кэша.
Такое ощущение, что я что-то упускаю или пропускаю очень важный шаг. Поскольку потоковые представления QWebView в PyQt не являются действительно задокументированной темой, я был бы очень признателен за любую помощь в том, как это успешно реализовать.