weidagang2046的專欄

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

          30 個子進程來并行下載不同的鏈接

          ?? 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?個進程
          ?? 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 對象,同時必須標明最大進程數。如果使用 0 的話就可以避免 fork 來達到調試程序的作用。

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

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

          注意:在子進程中不能使用 $pm->start。 如果你想在子進程中使用另外一組子進程,你必須再初始化一個 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

          主站蜘蛛池模板: 章丘市| 安西县| 修武县| 新营市| 龙陵县| 吴江市| 仙桃市| 都匀市| 葫芦岛市| 英吉沙县| 高青县| 涟源市| 凤庆县| 阿勒泰市| 兴安盟| 新绛县| 望江县| 佳木斯市| 平潭县| 丹阳市| 确山县| 汤阴县| 阿拉善右旗| 财经| 裕民县| 化州市| 中超| 新兴县| 明水县| 原平市| 都昌县| 通渭县| 达拉特旗| 鄯善县| 固阳县| 南靖县| 潜江市| 鹤山市| 苍山县| 蒙山县| 田林县|