weidagang2046的專欄

          物格而后知致
          隨筆 - 8, 文章 - 409, 評論 - 101, 引用 - 0
          數(shù)據(jù)加載中……

          30 個子進(jìn)程來并行下載不同的鏈接

          ?? use ?LWP :: Simple;
          ??
          use ?Parallel :: ForkManager;

          ??


          ??
          @links = (?
          ????[
          " http://www.foo.bar/rulez.data " , " rulez_data.txt " ] , ?
          ????[
          " http://new.host/more_data.doc " , " more_data.doc " ] ,
          ????

          ??);

          ??


          ??
          # ?同時使用?30?個進(jìn)程
          ?? my ? $pm ? = ?new?Parallel :: ForkManager( 30 );?

          ??
          foreach ? my ? $linkarray ?( @links )?{
          ????
          $pm -> start?and? next ;? # ?開始?fork

          ????
          my ?( $link , $fn )? = ?@ $linkarray ;
          ????
          warn ? " Cannot?get?$fn?from?$link " ?
          ??????
          if ?getstore( $link , $fn )? != ?RC_OK;

          ????
          $pm -> finish;? # ?do?the?exit?in?the?child?process
          ??}
          ??
          $pm -> wait_all_children;

          首先通過 new 來初始化一個 ForkManager 對象,同時必須標(biāo)明最大進(jìn)程數(shù)。如果使用 0 的話就可以避免 fork 來達(dá)到調(diào)試程序的作用。

          然后使用 $pm->start 來開始 fork。 $pm 在子進(jìn)程時返回 0 ,父進(jìn)程時返回子進(jìn)程的進(jìn)程號(具體請參閱 Perl 的 fork 文檔)?!癮nd next” 用來跳過父進(jìn)程。注意:如果 fork 失敗的話, $pm->start 就提示錯誤,程序結(jié)束。

          $pm->finish 結(jié)束子程序(假設(shè)我們一開始使用了 start 來 fork)

          注意:在子進(jìn)程中不能使用 $pm->start。 如果你想在子進(jìn)程中使用另外一組子進(jìn)程,你必須再初始化一個 Parallel::ForkManager 對象。

          from: http://www.perlchina.org/archive/archive.php?action=archive&page=44

          posted on 2006-05-21 20:37 weidagang2046 閱讀(396) 評論(0)  編輯  收藏 所屬分類: Perl

          主站蜘蛛池模板: 林芝县| 普安县| 剑川县| 龙江县| 碌曲县| 通江县| 聂拉木县| 慈溪市| 思茅市| 姚安县| 富顺县| 昂仁县| 册亨县| 兴仁县| 罗田县| 长兴县| 界首市| 建德市| 抚松县| 南投市| 防城港市| 孟州市| 海林市| 大方县| 乡宁县| 梓潼县| 霍林郭勒市| 灯塔市| 丽江市| 吉林市| 莆田市| 琼海市| 普兰县| 屏东县| 涞水县| 沛县| 武川县| 金溪县| 烟台市| 满洲里市| 鹤峰县|