状況は次のとおりです。特定の URL をロードするクラスがあり、この URL に送信する必要があるパラメーターのリストもあります。スレッドを使用して、この URL を「同時に」ロードしたい、つまり、1 つの QWebView をロードする代わりに、一度に 5 つのウィンドウを開きたい別のウィンドウをロードするよりも終了したい。
さて、問題は、すべてのウィンドウの速度が異なるため、使用中のパラメーターを追跡する必要があることです。
例えば:
params = [1,2,3,4,5,6,7]
a = MyClass(1)
b = MyClass(2)
c = MyClass(3)
クラスbが他の2つのクラスの前に終了したとしましょう。値4を取得し、再び開始します。
そして、これはサンプルコードです:
#! /usr/bin/env python2.7
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
import sys, signal
class Grabber(QWebView):
def __init__(self, param=None):
QWebView.__init__(self)
self.loadFinished.connect(self._loadComplete)
url = QUrl('http://some website.com/search?param=%s'%param)
self.load(url)
self.show()
def _loadComplete(self):
print "Done"
if __name__ == "__main__":
app = QApplication(sys.argv)
# Dont know what to do with the next 2 lines
thread_pool = QThreadPool()
thread_pool.setMaxThreadCount(10)
param = [1,2,3,4,5,6,7,8,9,10,11,12] # and so on
# Whant to achive something similar:
for i in param:
a = Grabber(i)
b = Grabber(i)
c = Grabber(i)
d = Grabber(i)
e = Grabber(i)
if signal.signal(signal.SIGINT, signal.SIG_DFL):
sys.exit(app.exec_())
app.exec_()
スレッド、エーテル python ネイティブ スレッド、または PyQt4 QThread を使用する必要があると確信しています。