【发布时间】:2012-03-28 23:39:41
【问题描述】:
我正在构建一种网络爬虫。基本上,软件会做的是:
- 用户(我)输入一些数据(ID) - ID 很复杂,所以不仅仅是数字
- 根据这些ID,脚本访问http://localhost/ID
完成此任务的最佳方法是什么?所以我正在寻找超过 20-30 个并发连接来做到这一点。
我在想,一个简单的循环会是解决方案吗?这个循环会启动 QThreads(它是一个 Qt 应用程序),所以它们会同时运行。
我在循环中看到的问题是如何指示它仅使用之前未使用的那些 ID,即在之前执行的迭代/线程中?我是否需要某种“委托人”函数来跟踪已使用的 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 分开,并且仅将 QT 用于 GUI。爬虫逻辑应该用纯python编写或重用现有的爬虫,如scrapy
标签: python multithreading pyqt pyside