Perl多线程生成一些数据

usethreads;
#所用模块:threads
#模块中的方法:threads->create(),创建一个新线程;
#threads->join(),收割已经创建的线程;
#threads->list(threads::all),返回所有已经创建的线程;
#threads->is_joinable(),返回目标线程是否已经完成,等待join;

#得到随机数
subGetRandomNum
{
my$Max=@_;
returnint(rand($Max));
}

subGetRandomString
{

my$AlapContent=shift;
my$Num=shift;

my$RandomString=@$AlapContent[&GetRandomNum(@$AlapContent)].@$AlapContent[&GetRandomNum(@$AlapContent)].
@$AlapContent[&GetRandomNum(@$AlapContent)].@$AlapContent[&GetRandomNum(@$AlapContent)].&GetRandomNum(@$Num);
#print"stringis$RandomString\n";
return$RandomString;
}

#写入文件

subWriteFileContent
{
my($FileName,@logitem)=@_;
open(logfile,">$FileName")||die"can'topenfile$&!";
printlogfile"@logitem\n";
close(logfile);
}


subGenerateRandomFile()
{
my$FileLine=shift;
my$File=shift;
my@RandContent;
my@AlapContent=(a..z,A..Z);
my@Num=(1..100);

foreach$Line(1..$FileLine)
{
$RandomLine=&GetRandomString(\@AlapContent,\@Num);
push@RandContent,$RandomLine."\n";
}

my$FileName="./Save/".$File."\.txt";
&WriteFileContent($FileName,@RandContent);
}


my$SaveFile="./Save";

unless(-d$SaveFile)
{
mkdir$SaveFile;
}

print"PleaseInputtheFileNum,youwanttoGenerate\n";
my$FileNum=<STDIN>;
chomp($FileNum);

print"PleaseInputEachLinenuminthefile\n";
my$FileLine=<STDIN>;
chomp($FileLine);

my$RandomLine;
print"BeginingGenerateFile......\n";
my$max_thread=20;
my@thread_array;

foreach$File(1..$FileNum)
{
if($File%100==0)
{
print"The$Filefilecomplete\n";
}

if($current_thread>=$max_thread)
{

#遍历所有的线程
foreachmy$thread(@thread_array)
{

#判断线程是否运行完毕
if($thread->is_joinable())
{

#释放该线程
$thread->join();
}
}

$current_thread=0;
}
#创建线程
$thread_array[$current_thread]=threads->new(\&GenerateRandomFile,$FileLine,$File);
$current_thread++;
}

print"FinishtheWork,Pressanykeyexit......\n";
my$Input=<STDIN>;

你可能感兴趣的:(多线程,perl,生产数据)