【发布时间】:2015-01-27 06:59:00
【问题描述】:
我目前正在针对多个 Web 服务器运行 python 脚本。一般任务是找出 cms 内的损坏(外部)链接。到目前为止,脚本运行得很好,但我测试了大约 50 个内部项目,每个项目都有数百个子页面。这以我必须检查的数千个外部链接结束。
出于这个原因,我添加了多线程 - 按照我的意愿提高性能。但问题来了。如果要检查的页面包含指向同一服务器的链接列表(已知问题或要执行的任务的捆绑),它将减慢目标系统的速度。我既不想减慢我自己的服务器,也不想减慢不是我的服务器。
目前我运行最多 20 个线程,比等待 0.5 秒,直到“线程位置”准备好使用。为了检查一个 URL 是否损坏,我处理来自 urllib2 和 log 的 urlopen(request) 每次它抛出一个 HTTPError。返回到同一服务器的多个 URL 列表...我的脚本将“淹没”网络服务器 - 由于多线程 - 最多 20 个同时请求。
只是您知道此脚本在哪些维度上运行/URL 必须检查:仅使用 20 个线程会使当前脚本“减慢”仅 4 个项目的运行时间至 45 分钟。这只是检查 .. 下一步将检查损坏的 URL 是否存在 .使用当前脚本向我们展示了服务器监控中响应时间为 1000 毫秒的峰值。
大家都知道如何改进这个脚本吗?或者有没有更好的方法来检查这么多的 URL?如果有 10 个对单个目的地的请求,也许一个计数器会暂停线程?
感谢所有建议
【问题讨论】:
-
您是否以
HEAD开头告诉服务器您只需要状态而不是内容?
标签: python multithreading url urlopen