DBD::Pg でリクエスト並列化
PerlからPostgreSQLに非同期アクセスする方法 - iakioの日記 - postgresqlグループ を見てほぉぉと思って、IRC で話したりしながら適当に書いてみた。たぶんこんな感じ。動かしてないけど。
use DBD::Pg qw(:async); # send queries for my $dbh (@dbh_list) { $dbh->execute(...); } # and wait until all responses arrive my %pending = map { +($_->{pg_socket}, [ IO::Handle->new_from_fd($_->{pg_socket}), $_ ]) } @dbh_list; my $sel = IO::Select->new(); $sel->add($_->[0], 'r') for values %pending; while (%pending) { for my $h ($sel->can_read(1)) { if ($pending{$h->{pg_socket}}->[1]->pg_ready) { $sel->remove($pending{$h->{pg_socket}}->[0]; delete $pending{$h->{pg_socket}}; } } }