我无法获得所需的结果。我想在单独的线程中执行子例程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;
答案 0 :(得分:1)
当您fork
进程时,它会复制该进程。这包括生成的随机数的种子。您需要在子流程中change the seed。
my $pid = $pm->start() and next;
srand();
my_fun();
$pm->finish();