首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用perl AnyEvent测量个人所用的时间

使用perl AnyEvent测量个人所用的时间
EN

Stack Overflow用户
提问于 2015-12-28 20:58:44
回答 2查看 84关注 0票数 2

我需要获取许多http URL,我使用AnyEvent::HTTP为每个URL做这件事,我需要测量所用的时间,我该怎么做呢?

我的代码(精简后)在这里

代码语言:javascript
复制
    #!/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;
EN

回答 2

Stack Overflow用户

发布于 2016-10-15 03:07:51

如果您将http_request()替换为以下内容会怎么样:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-10-17 13:28:41

更简单的方法是拥有一个变量,并在on_prepare上更新它,并在TheAmigo提到的$anyevent->end之后记录它

分析/计时任何函数的一般方法:假设您的函数是fetchHttpUrl($url),您可以这样调用它

代码语言:javascript
复制
profile(\&fetchHttpUrl, $url);

sub profile {
    my($function, @arguments) = @_;
    my $startTime = currentTimeInMilliseconds();
    $function->(@arguments);
    my $durationInMs = currentTimeInMilliseconds() - $startTime;
    print"{".getMethodNameFromPointer($function)."(".join(",", @arguments).")"."} : $durationInMs ms";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34493980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档