【发布时间】:2014-10-02 15:13:31
【问题描述】:
我用 Python 写了一个爬虫脚本,它工作得很好。但是,完成需要很长时间(超过 9 小时,具体取决于站点有多少链接)。
我想在其中实现线程化以缩短时间,但我无法确定哪个部分最适合线程化。乍一看,我会创建线程来获取每个页面的页面内容,然后锁定visited_urls 和to_visit_urls 数组以确保所有内容都使用相同的列表。
但似乎它可能花费最多的时间检查visited_urls 和to_visit_urls 数组中的重复项,那么以这种方式进行线程化真的可以为我节省那么多时间吗?有没有更好的方法让我的蜘蛛穿线?
【问题讨论】:
-
如果您已经对代码进行了概要分析,并且在成员资格检查上花费了那么多时间,那么您可能正在使用
list来进行visited_urls和to_visit_urls的 O(n) 查找。尝试改用set,它有 O(1) 次查找。 -
我没有分析我的代码,我只是有一个感觉。 :D
标签: python multithreading web-crawler