我在使用 python 编写网站蜘蛛时遇到了麻烦。基本思路如下:
我有一个队列,每个线程从队列中获取一个 url 并调用一个函数getAllLinks
从该 url 获取链接。伪代码如下:
class Spider(Threading.Thread):
def __init__(self):
self.queue = Queue.Queue
def run(self):
while True:
url = self.queue.get()
getAllLinks(url)
time.sleep(0.1) #I try to release the GIL
但问题是:即使我在调用 getAllLinks 后手动切换线程,程序也没有单线程程序快。有没有更好的办法?
我想使用多个线程来提高蜘蛛的处理速度,但我认为time.sleep()
速度较慢,因为我强制一个线程释放 GIL。
我认为这类似于:for url in urlList: spider(url)
. 不是在 之后才切换线程getAllLinks()
,本质上与仅使用一个线程相同吗?