我正在构建一种网页抓取工具。基本上,软会做的是: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