亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1518 | 回復(fù): 0
打印 上一主題 下一主題

perl多進(jìn)程出錯(cuò),求解 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-08-08 15:56 |只看該作者 |倒序?yàn)g覽
本帖最后由 kingwmj 于 2012-08-08 16:02 編輯

寫了一個(gè)程序,因?yàn)樘?所以改用多進(jìn)程,但是與我的原來的不分進(jìn)程的程序結(jié)果不一致,最大的可能是多個(gè)進(jìn)程互相修改某個(gè)變量.但我沒有找到,求高手給看一下.
  1.         sub step_3_jaccard_distance_cal(){
  2.                 #格式:+1        P08758        Human        0        0        0        0        0        0        0        0        0        0        0        0        0        1
  3.                 my $in_file=shift;
  4.                 my $in= new IO::File($in_file) or die  $!;
  5.                 my $out_file=shift;
  6.                 my $out = new IO::File(">$out_file") or die $!;
  7.                 my $len=0;
  8.                 seek $in,0,0;
  9.                 print "distance of r and s\n";
  10.                 my @matrix=<$in>;
  11.                 $len=my @list=split/\s+/,$matrix[0];
  12.                 print "$len\n";
  13.                 #以下為多進(jìn)程----------------------------------------------------------------------------------------
  14.                 my @child;
  15.                          $|++;
  16.                   print "good\n";
  17.                  # my $R;       
  18.                   my $num_proc = 0;
  19.                   ## == number of collected ==
  20.                   my $num_collect = 0;
  21.                   my $collect;
  22.                   ## == get the child signal ==
  23.                   $SIG{CHLD} = sub { $num_proc--};
  24.                
  25.                
  26.                 for(my $r=0;$r<=$len-4;$r++){  #
  27.                         #my @sum=();
  28.                         #$sum[$r]=0;
  29.                         print "r=$r\n";
  30.                         my $pid=fork();   #分多進(jìn)程
  31.                         push(@child,$pid);
  32.                         if(!defined($pid)){
  33.                                      print "Error in fork: $!";
  34.                                 exit 1;
  35.                         }
  36.                         if($pid==0){    #子程序
  37.                                 my @sum=();
  38.                                 $sum[$r]=0;
  39.                                
  40.                                 for(my $s=0;$s<=$len-4;$s++){  
  41.                                         print "s= $s\n";
  42.                                         my $l_up;  #這個(gè)是hs_up共有多少個(gè)鍵 #這個(gè)是分子
  43.                                         my $l_dn;  #這個(gè)是hs_dn共有多少個(gè)鍵 #這個(gè)是分母
  44.                                         my %hs_up=();  
  45.                                         my %hs_dn=();  
  46.                                         my @d=();
  47.                                         foreach my $line (@matrix){
  48.                                                 my @data=split/\s+/,$line;
  49.                                                 if(($data[3+$r]!=$data[3+$s]) and (($data[3+$r]==1) or ($data[3+$s]==1)))        {  #注意,這里是從3開始,把輸入文件整理成前三列是標(biāo)記
  50.                                                         $hs_up{$data[1]}=2;  #這里data[1] 是UNIPROT ID
  51.                                                 }
  52.                                                 if(($data[3+$r]==1) or ($data[3+$s]==1)){
  53.                                                         $hs_dn{$data[1]}=2;
  54.                                                 }
  55.                                         }

  56.                                         $l_up=keys %hs_up; #
  57.                                         $l_dn=keys %hs_dn;

  58.                                         if($l_dn==0){
  59.                                                 print "r=$r, s=$s\n";
  60.                                                 die ;  #
  61.                                                
  62.                                         }
  63.                                         else{
  64.                                                 $d[$r][$s]=$l_up/$l_dn;
  65.                                                 #print $out "$d[$r][$s]        "
  66.                                         }
  67.                                         $sum[$r]+=$d[$r][$s];
  68.                                         #print $out "$sum[$r]        ";
  69.                                 }
  70.                                 print $out "$sum[$r]        ";
  71.                                 exit 0;         #very important. 運(yùn)行到他,這個(gè)子進(jìn)程就結(jié)束了.所以要放到子進(jìn)程的最后.
  72.                         }
  73.                         $num_proc ++;
  74.                         ## == if need to collect zombies ==
  75.                         if (($r-$num_proc-$num_collect) > 0) {  
  76.                                 while (($collect = waitpid(-1, WNOHANG)) > 0) {
  77.                                                 $num_collect ++;
  78.                                 }       
  79.                         }
  80.                         while($num_proc > 1000){     #   控制子進(jìn)程數(shù)
  81.                                         sleep(3);
  82.                                         print "stop\n";     
  83.                         }
  84.                        
  85.                        
  86.                 }
  87.                 print $out "\n";
  88.                 foreach (@child){      #  回收所有進(jìn)程
  89.                         waitpid($_, 0);
  90.                 }
  91.                 $in->close;
  92.                 $out->close;
  93.         }
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP