- 论坛徽章:
- 42
|
my $cv = AnyEvent->condvar;代表事件循环开始
$recv就是整个事件循环结束
$begin和$end是一对事务.
比如你要异步取100个网站
那么每个http_get之前begin,回调里面end
全都取完了$recv结束
你看看以前斑竹贴的例子,超清晰- #!/usr/bin/perl
- use strict;
- use warnings;
- use AnyEvent;
- use AnyEvent::HTTP;
- my $cocurrent = 100; # 并发数
- my @todoList = map { "keyword" . $_ } (1 .. 1000); # 待查询的关键词
- my $cv = AnyEvent->condvar;
- doit() foreach 1..$cocurrent;
- sub doit{
- my $word = shift @todoList;
- return if not defined $word;
- $cv->begin;
- http_get( "http://www.baidu.com/s?wd=$word", sub { done( $word, @_ ) } );
- }
- sub done {
- my ($word, $content, $hdr) = @_;
- $cv->end();
- print "Search: $word\tStatus: ", $hdr->{Status}, "\n";
- doit();
- }
- $cv->recv();
复制代码 |
|