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 ().
如果要发送不同的非阻塞请求,请尝试使用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(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |