perl 多執行緒
需要引入的pm檔案有:
use threads; #匯入threads多執行緒處理包
use threads::shared; #使用執行緒間共享變數
程式和C基本上一樣,下面是有關執行緒操作的相關程式碼:
#main function
sub main()
{
$dbcon = ConnectTD();
while(1)
{
my @dataset = Get_Config_Info();
my $rec_cnt = @dataset;
for(my $i=0;$i {
processFiles($dataset[$i][0],$dataset[$i][1],$dataset[$i][2],$dataset[$i][5],$dataset[$i][6],$dataset[$i][7]);
}
foreach my $thread (@threads)
{
# join() does three things: it waits for a thread to exit,
# cleans up after it, and returns any data the thread may
# have produced.
$$thread->join();
}
}
$dbcon->disconnect;
}
……
sub processFiles
{
my ($etl_system,$etl_job,$etl_serv,$str_sql,$filename,$filepath) =@_;
# 每次建立執行緒處理檔案之前,先檢查當前已啟動的執行緒數目是否小於最大允許數目
# 如果已經建立了足夠多的執行緒,就不斷地輪詢
while(1)
{
if($CurrentThreads < $MaxThreads)
{
# 建立執行緒,傳入引數
my $thread = threads->create('processFile',$etl_system,$etl_job,$etl_serv,$str_sql,$filename,$filepath);
# 建立一個thread以後要用join取得該thread的返回值,然後系統才會對thread進行清理,
# 否則所有thread的資訊都會保留下來,當然越積越多了。對返回值不關心的時候要用detach顯式剝離該thread。
push(@threads, $thread);
#$thread->detach();
last; # 退出迴圈
}
else
{
# 執行緒數達到最大時,等待一個時間段(120m):
LOG("執行緒數已到達最大值,sleep 120秒鐘");
sleep 120;
}
}
}
……
sub processFile
{
## 當前新建的執行緒數加一:
{
lock($CurrentThreads);
$CurrentThreads++;
}
my ($etl_system,$etl_job,$etl_serv,$str_sql,$filename,$DesDataDir) = @_;
LOG("開始連線Oracle資料庫,以獲取$filename檔案...n");
my $dbh = ConnectOra();
my $sth=$dbh->prepare($str_sql);
$sth->execute;
open(NEWFILE, "> $DesDataDir/$filename.dat") ;
LOG("開始獲取$filename資料...n");
my @recs;
my @b_rows='';
while (@recs=$sth->fetchrow_array)
{
print NEWFILE @recs;
}
close(NEWFILE);
$dbh->disconnect;
log("$filename取數完成n");
## 當前活動的執行緒數減一:
{
lock($CurrentThreads);
$CurrentThreads--;
}
}
……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16723161/viewspace-1016128/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Perl 多執行緒模組 Parallel::ForkManager執行緒Parallel
- 多執行緒和多執行緒同步執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒與多執行緒執行緒
- VC多執行緒 C++ 多執行緒執行緒C++
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 多執行緒之初識執行緒執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- 多執行緒-執行緒概述等執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- a、多執行緒執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- Java多執行緒——守護執行緒Java執行緒
- JavaThread多執行緒執行緒池Javathread執行緒
- Java多執行緒16:執行緒組Java執行緒
- Java多執行緒18:執行緒池Java執行緒
- 多執行緒之手撕執行緒池執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- 執行緒以及多執行緒,多程式的選擇執行緒