這裏的情況: 我有一個類加載特定的網址,也有一個參數列表,我需要發送到這個網址。我希望使用線程來同時加載這個URL,換句話說,不是加載一個QWebView,而是加載另一個QWebView,我想一次打開5個窗口。PyQt4 QWebView的多線程
好吧,現在問題是,每個窗口都會有不同的速度,所以我需要跟蹤哪些參數正在使用。
例如:
params = [1,2,3,4,5,6,7]
a = MyClass(1)
b = MyClass(2)
c = MyClass(3)
現在如果讓我們說B類已經完成befoure其他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_()
我敢肯定我需要使用線程,醚蟒蛇本地線程或PyQt4中的QThread。
不知道它究竟是如何在Python/PyQt的實現,但它聽起來像你AFER是隊列結構每次抓取器完成其工作時,可以調用pop()以獲取下一個值。只要確保在某種類型的線程鎖(例如互斥鎖)中將調用包裝爲pop(),以便一次只有一個線程嘗試調用pop。不是一個真正的答案(因此在評論中),但應該給你一些條款谷歌的解決方案;) –
謝謝,沒有想到它,但聲音很棒 – Vor
@Vor結帳我的答案,我編輯它返回'grabber'對象 – 2012-12-19 17:19:04