Python を使用して Web サイトのスパイダーを作成するのに問題があります。基本的な考え方は次のとおりです。
キューがあり、各スレッドはキューから 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()
、基本的に 1 つのスレッドを使用するのと同じですか?