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

Perl Parallel ::具有DBI数据库处理程序的ForkManager

发布时间:2020-12-16 06:20:18 所属栏目:大数据 来源:网络整理
导读:我有兴趣并行执行多个数据库操作.我玩过Perl Parallel :: ForkManager,但还没有用过任何数据库.我已经读过这个数据库连接是 not supported very well.有任何人对此有经验吗? 作为一个例子,我可能会产生一个系统调用(它使DBI工作)不是原始代码,即 #!/opt/loc
我有兴趣并行执行多个数据库操作.我玩过Perl Parallel :: ForkManager,但还没有用过任何数据库.我已经读过这个数据库连接是 not supported very well.有任何人对此有经验吗?

作为一个例子,我可能会产生一个系统调用(它使DBI工作)不是原始代码,即

#!/opt/local/bin/perl -w

use strict;
use Parallel::ForkManager;

$| = 1;

my $max_procs = 10;

my $pm =  new Parallel::ForkManager($max_procs);

for (my $var = 0; $var <= 10; $var++) {
  my $pid = $pm->start('proc'.$var) and next;
  sleep ( 2 );
  system( "./DBworker.pl $var" );
  $pm->finish(0); 
}

print "Waiting for child procsn";
$pm->wait_all_children;
print "complete!n";

解决方法

如果其他程序正在完成工作,那么分叉就没有危险.当您打开与数据库的连接然后fork时,会出现危险.孩子不能重复使用父母的联系;但是,看看 DBIx::Connector,它处理你需要做的事情,并且运行多个程序通常不是正确的答案.

#!/usr/bin/perl

use strict;
use warnings;

use DBIx::Connector;
use Parallel::ForkManager;

my $dsn  = "dbi:SQLite:dbname=foo.db";
my $user = "";
my $pass = "";
my $conn = DBIx::Connector->new($dsn,$user,$pass,{
        AutoCommit       => 0,PrintError       => 0,RaiseError       => 1,ChopBlanks       => 1,FetchHashKeyName => 'NAME_lc',}
);
END { unlink "foo.db" }

#setup table
$conn->run(fixup => sub {
    my $dbh = $_;
    $dbh->do("create table foo ( id integer,name char(35) )");
    my $sth = $dbh->prepare("insert into foo (id,name) values (?,?)");
    while (<DATA>) {
        chomp;
        $sth->execute(split /,/);
    }
});

my $pm = Parallel::ForkManager->new(3);

my $sth = $conn->dbh->prepare("select * from foo where id = ?");
for my $id (1 .. 3) {
    next if $pm->start;
    $sth->execute($id);
    while (my $row = $sth->fetchrow_hashref) {
        print "$id saw $row->{id} => $row->{name}n";
    }
    $pm->finish;
}

$pm->wait_all_children;

print "donen";

__DATA__
1,foo
2,bar
3,baz

(编辑:李大同)

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

    推荐文章
      热点阅读