通过parallel :: ForkManager执行子程序

时间:2014-12-04 06:21:47

标签: perl

我无法获得所需的结果。我想在单独的线程中执行子例程my_fun。但是$ meterId没有改变。例如,如果我执行3个线程,那么$ meterId与OSE-123,OSE123相同, OSE-123

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

NAMES:for (my $i= 0 ;$i <=$ENV{'NO_OF_CUSTOMER'};$i++)
{
my $pid = $pm->start() and next NAMES;
my_fun();

$pm->finish(); # pass an exit code to finish

}

sub my_fun()

{


$meterId='OSE-'.int (rand(10000000));
lock($meterId);
chomp (my $timeCheck=`date +%H`);
my $cmdOut= $testCaseObj->preprovisionAccount   ("CUS_P_EUR_STD","ACCEUR_STD", "$meterId", "P_EUR_STD", "GEN" , "EUR","DPL");
my ($topLAcc,$subId,$cusId) = $testCaseObj->getAccountDetails($cmdOut);
$testCaseObj->updateLogTable("$cusId","$topLAcc","$subId","$meterId");

}
$pm->wait_all_children;

1 个答案:

答案 0 :(得分:1)

当您fork进程时,它会复制该进程。这包括生成的随机数的种子。您需要在子流程中change the seed

my $pid = $pm->start() and next;

srand();
my_fun();

$pm->finish();
相关问题