加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl Anyevent,非阻塞redis推

发布时间:2020-12-16 06:12:23 所属栏目:大数据 来源:网络整理
导读:我有以下代码来做非阻塞rpush到redis服务器 当我只运行1次rpush时,代码工作正常 但是当我在while循环中运行它时,脚本在第一次执行后挂起. 为什么? #!/usr/bin/perl use AnyEvent;use AnyEvent::Redis::RipeRedis;use strict;#my $cv = AE::cv(); my $redis
我有以下代码来做非阻塞rpush到redis服务器
当我只运行1次rpush时,代码工作正常
但是当我在while循环中运行它时,脚本在第一次执行后挂起.
为什么?

#!/usr/bin/perl                                                                                                                                                          
use AnyEvent;
use AnyEvent::Redis::RipeRedis;
use strict;
#my $cv = AE::cv();                                                                                                                                                      

my $redis = AnyEvent::Redis::RipeRedis->new(
  host     => 'localhost',port     => '6379',);

my $i=0;

my $cv;
while($i++ < 5) {
    $cv = AnyEvent->condvar;
    $redis->rpush( 'list',"1","2","3",{ on_done => sub {
                   my $data = shift;
                   print "$datan";
                     },}
        );
    $cv->recv();
}
$redis->quit(
    sub {$cv->send();}
    );
$cv->recv();

解决方法

当您在while循环中调用$cv-> recv()并且脚本正在等待$cv-> send或$cv-> croak时阻止脚本执行,但在回调中你不要调用$cv-> send ().

$cv->recv

Wait (blocking if necessary) until the ->send or ->croak methods have been called on $cv,while servicing other watchers normally.

如果要发送不同的非阻塞请求,请尝试使用AnyEvents开始和结束方法.

#!/usr/bin/perl
use AnyEvent;
use AnyEvent::Redis::RipeRedis;
use strict;

my $redis = AnyEvent::Redis::RipeRedis->new(
  host     => 'localhost',);

my $i=0;

my  $cv = AnyEvent->condvar;
while($i++ < 5) {
   $cv->begin;
   $redis->rpush( 'list',{ 
                  on_done => sub {
                    my $data = shift;
                    print "$datan";
                    $cv->end();
                  },}
    );
}

$cv->recv();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读