- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对并行执行多个数据库操作感兴趣。我玩过 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 procs\n";
$pm->wait_all_children;
print "complete!\n";
最佳答案
如果工作正在由其他程序完成,则 fork
没有危险。 ing。当您打开与数据库的连接然后 fork 时,危险就来了。 child 不能重用 parent 的连接;但是,看看 DBIx::Connector
,它会处理您在 fork
之后需要做的事情为您设置并运行多个程序通常不是正确的答案。
#!/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 "done\n";
__DATA__
1,foo
2,bar
3,baz
关于Perl Parallel::ForkManager 与 DBI 数据库处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3127229/
我只是在学习Perl作为第四语言。 我的愿望是使用 Parallel::ForkManager 来加速foreach循环,该循环使用其成员来自文本文件的数组。 基本上,我正在测试URL的.txt文件,
我对此很陌生Parallel::ForkManager Perl 中的模块,它有很多功劳,所以我认为它支持我需要的东西,但我还没有弄清楚。 我需要做的是在每个子进程中,它根据每个子进程中计算的键值将一
可能是因为子进程不知道我的散列(见下面的代码),散列 %output 没有收集任何东西..除了写一个 tmp 文件之外还有其他方法来收集值吗? foreach $Item (@AllItems) {
我正在尝试使用 Parallel::ForkManager 来并行运行,但不幸的是子程序并行不返回任何条目。 sub parallel { my ($self,$values) = @_;
我有一段代码想要并行化(仅供引用): my (%fastas, %counts); foreach my $sample ( sort keys %AC2 ) { foreach my $ch
我想让子进程写入父进程的@array。我读过有关管道的信息,但我对如何实际实现它感到非常困惑: use Parallel::ForkManager; my @array; my $pm=new Par
我的错误如下 当您在/usr/lib/perl5/site_perl/5.8.6/Parallel/ForkManager.pm 第 463 行的子进程中时,无法启动另一个进程。 我的代码有问题的部分
我想知道我对以下脚本/逻辑的理解是否正确。 我有节点列表,我需要通过对服务器执行 SSH 来利用我拥有的服务器数量在每个节点上运行某个命令,这意味着该过程应该并行发生。 我有 node_list.tx
我想知道使用 Parallel::ForkManager (或其他并行化工具)来处理我拥有的一些文件是否是一个好主意。基本上,我正在处理一个非常大的文件,并将其内容输出到多个文件中。在 64 核服务器
我有一个使用 Parallel::ForkManager 的脚本。然而,即使在所有子进程都完成之后,wait_all_children() 进程也会花费非常长的时间。我知道的方法是打印出一些时间戳(见
我正在尝试使用 Parallel::ForkManager 来控制一些子进程。我想将并发运行的进程数限制为 10 个。我总共需要运行 20 个。 我知道我可以在对象声明的第一行中将进程限制设置为 10
我对并行执行多个数据库操作感兴趣。我玩过 Perl Parallel::ForkManager 但还没有将它用于任何数据库。我读过数据库连接是 not supported very well有了这个。
是否可以使用 Parallel::ForkManager 为 fork 实现某种超时(时间限制)? 基本的 Parallel::ForkManager 脚本如下所示 use Parallel::For
我有一个子例程,我已经尽可能多地连续优化它,大致像 sub overlap { my $hash_reference = shift; # pass the hash to the sub
当我杀死一个使用 ForkManager 的 perl 进程时,我希望所有子进程都死掉。在下面的代码中,如果我运行它并在 sleep 行运行时按 ctrl+c ,则 sleep 进程被终止,但 pri
通过 Parallel::Fork fork 后,我只有一个工作线程: ps -ef | grep ./BuildReportIndexV_VR2.pl 503 15955 9531 18
我正在使用 Parallel::ForkManager 将一些变量从子级传递给父级。我可以通过 $var ......我如何通过更多? (再次感谢 Hobbs 帮助我走到这一步) use Parall
我厌倦了通过使用 Parallel:ForkManager 的 perl 脚本并行运行多个作业。 #!/usr/bin/perl -w use Parallel::ForkManager; my @
我在同时调用 Parallel::ForkManager 和 Inline::Java 时遇到问题。具体来说,如果我使用 JNI => 1 选项(我必须这样做)调用 Inline::Java ,那么
我正在尝试使用 Perl5 的 Parallel::ForkManager 在 Perl6 中并行运行一系列 shell 命令。 这是工作 Perl5 代码的几乎精确的翻译。 CONTROL {
我是一名优秀的程序员,十分优秀!