2015-12-28 9 views
2

У меня есть требование получить много URL-адресов http, и я использую AnyEvent :: HTTP для этого Для каждого URL-адреса мне нужно измерить время, как я могу это сделать?Измерение индивидуального времени с использованием perl AnyEvent

Мой код (урезанная) здесь

#!/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)[email protected]_; 
    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; 

ответ

0

Что делать, если вы замените 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]); 
    } 
); 
0

Simpler способ иметь переменную и обновить его на on_prepare и зарегистрировать его после $anyevent->end, как упомянуто TheAmigo

Общий способ профилирования/времени любой функции: Предполагая, что y наша функция 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"; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^