joe*_*joe 5 mysql parallel-processing perl dbi
我试过Perl fork manager和DBI.但我得到错误DBD :: mysql :: st执行失败:在查询期间丢失了与MySQL服务器的连接.
这里的示例代码:我想在低值到高值之间进行查询(我已经吐出了10k记录)
use Parallel::ForkManager;
my $pm = new Parallel::ForkManager(50);
my $db = krish::DB->new or die $!; # its has all connection details
while ( $low < $high ) {
# Some value manipulation
my $pid = $pm->start and next;
#db_execution returns execution
while ( my $sth = db_execution ( $db, $low , $high ) ) {
...
#fetch row operation
...
}
$pm->finish;
}
sub db_execution {
...
my $dbh = $db->connect( 'students' ) or die $!;
my $sth = $dbh->prepare( $sql ) or die "$!:" . $dbh->errstr;
$sth->execute or die "$!:" . $sth->errstr;
...
}
Run Code Online (Sandbox Code Playgroud)
使用并行处理执行相同的代码.有什么问题?怎么解决这个?
当您在进程之间共享数据库连接时(这是您使用fork执行的操作),您需要确保一个进程不会从另一个进程中关闭它.因为连接也是变量,所以当Perl解释器关闭时,它将调用该对象的DESTROY方法,在这种情况下将关闭连接.
因此,如果任何子节点关闭数据库连接(将在完成和关闭时发生),它将从父进程下将其终止.防止这种情况的方法是InactiveDestroy在fork之前在父进程中设置为true,然后在完成时在父进程中显式关闭连接.
https://metacpan.org/pod/DBI#InactiveDestroy
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |