我需要获取许多http URL,我使用AnyEvent::HTTP为每个URL做这件事,我需要测量所用的时间,我该怎么做呢?
我的代码(精简后)在这里
#!/usr/bin/perl
use strict;
use AnyEvent::HTTP;
use AnyEvent::Socket;
use Data::Dumper;
my $internal_ip=v192.168.2.103; #Use this ip to bind instead of default ip. Harcoding necessary :-( using v$ip
sub prep_cb {
my ($socket)=@_;
my $bind = AnyEvent::Socket::pack_sockaddr undef, $internal_ip;
# I need to start the time here
bind $socket, $bind
or die "bind: $!";
}
my $url="http://192.168.2.105/echo.php";
my $anyevent = AnyEvent->condvar;
$anyevent->begin;
http_request(
"GET" => $url,
on_prepare =>\&prep_cb,
sub {
my ($data, $hdr) = @_;
$anyevent->end;
# I need to measure the time taken
print Dumper([$data,$hdr]);
}
);
$anyevent->recv;发布于 2016-10-15 03:07:51
如果您将http_request()替换为以下内容会怎么样:
my $timer;
http_request(
"GET" => $url,
on_prepare => sub {$timer = time; prep_cb},
sub {
my ($data, $hdr) = @_;
$anyevent->end;
print "Took " . (time - $timer) . " seconds.\n";
print Dumper([$data,$hdr]);
}
);发布于 2016-10-17 13:28:41
更简单的方法是拥有一个变量,并在on_prepare上更新它,并在TheAmigo提到的$anyevent->end之后记录它
分析/计时任何函数的一般方法:假设您的函数是fetchHttpUrl($url),您可以这样调用它
profile(\&fetchHttpUrl, $url);
sub profile {
my($function, @arguments) = @_;
my $startTime = currentTimeInMilliseconds();
$function->(@arguments);
my $durationInMs = currentTimeInMilliseconds() - $startTime;
print"{".getMethodNameFromPointer($function)."(".join(",", @arguments).")"."} : $durationInMs ms";
}https://stackoverflow.com/questions/34493980
复制相似问题