我正在構建一種網頁抓取工具。基本上,軟會做的是:Python中的多線程網頁抓取/ PySide/PyQt
- 用戶(我)輸入一些數據(IDS) - ID是複雜的,所以不只是數字
- 基於這些ID,腳本訪問http://localhost/ID
完成此操作的最佳方法是什麼?所以我正在尋找20-30個併發連接來完成它。
我在想,會不會是一個簡單的循環解決方案?這個循環會啓動QThreads(這是一個Qt應用程序),所以它們可以同時運行。
然而,我所看到的循環的問題是如何指示它只使用那些之前沒有使用過的ID,即在它剛纔執行之前的迭代/線程中?我是否需要某種「委託人」功能來跟蹤哪些ID已被使用,並將未使用的委託給QThreads?
現在我已經寫了一些代碼,但我不知道這是否是正確的:
class GUI(QObject):
def __init__(self):
print "GUI CLASS INITIALIZED!!!"
self.worker = Worker()
for i in xrange(300):
QThreadPool().globalInstance().start(self.worker)
class Worker(QRunnable):
def run(self):
print "Hello world from thread", QThread.currentThread()
現在我不知道如果這些真正做到我想要的。這實際上是在單獨的線程中運行嗎?我在問,因爲currentThread()
每次執行都是一樣的,所以它看起來並不那樣。
基本上,我的問題歸結爲如何同時執行幾個相同的QThreads?
在此先感謝您的答案!
您應該將邏輯從GUI中分離出來,並且只在GUI中使用QT。抓取器邏輯應該用純Python編寫或重用現有的抓取工具,如[scrapy](http://scrapy.org/) – Dikei 2012-03-12 16:03:03