【发布时间】:2010-11-05 12:26:43
【问题描述】:
我正在尝试检查网站是否已启动并正在运行。我目前正在使用 Perl 中的 UserAgent 库执行此操作,超时时间为 1。但是,它对我来说仍然太慢了。
我每五分钟从 cron 调用一次脚本。有很多链接要检查,脚本需要五分钟以上才能完成执行。所以,我需要一种更有效的方法来做到这一点。它甚至可以是 C 语言中的解决方案。
【问题讨论】:
我正在尝试检查网站是否已启动并正在运行。我目前正在使用 Perl 中的 UserAgent 库执行此操作,超时时间为 1。但是,它对我来说仍然太慢了。
我每五分钟从 cron 调用一次脚本。有很多链接要检查,脚本需要五分钟以上才能完成执行。所以,我需要一种更有效的方法来做到这一点。它甚至可以是 C 语言中的解决方案。
【问题讨论】:
以下方法可以加速它:
【讨论】:
这很可能是因为您是按顺序执行的。
考虑使用LWP::Parallel::UserAgent - 它会同时运行许多请求。
【讨论】:
如果有很多链接,我建议你把程序multi-threaded或fork()多做几次。这样,您就可以期待速度的提升。
【讨论】:
use forks; - search.cpan.org/perldoc?forks
用httping怎么样?
【讨论】:
curl -I http://hostname
如果服务不可用或找不到页面,第一行将包含 503 或 404。
时间为 curl -I http://www.google.com 产生了这个
real 0m0.125s
user 0m0.004s
sys 0m0.004s
这用于 curl -I http://www.google.cmo
real 0m0.120s
user 0m0.004s
sys 0m0.004s
【讨论】:
从网络中获取资源通常需要相当长的延迟。
正如 Alan Haggai Alavi 所建议的,您可能希望将工作分配到多个并行线程/进程中。 Parallel::ForkManager 模块的文档甚至有一个您应该能够构建的示例。
【讨论】:
我不太了解 C(BLASPHEMY!)或 Perl,但我如何看待它,我会尝试以下方法:
2cts
【讨论】: