perl – 如何让DBD :: Pg可靠地超时?

前端之家收集整理的这篇文章主要介绍了perl – 如何让DBD :: Pg可靠地超时?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么在$sth->执行完成之后,此代码才执行信号处理程序?更重要的是,我该如何解决

#!/usr/bin/perl

use strict;
use warnings;

use DBI;
use Sys::SigAction qw( set_sig_handler );

my $dbh = DBI->connect('dbi:Pg:dbname=dc');

eval {
    my $h = set_sig_handler('ALRM',sub { die "timeout\n" });
    eval {
        alarm 1;
        my $sth = $dbh->prepare("SELECT pg_sleep(10)");
        print "Before execute\n";
        $sth->execute;
        print "After execute\n";
        $sth->finish;
    };
    alarm 0;
    die "$@" if $@;
};
die "$@" if $@;
print "Finished\n";

解决方法

请考虑使用Pg的 asynchronous query功能.

猜你在找的Perl相关文章