關於ThinkPHP進程計數類Process的用法

來源:互聯網
上載者:User
這篇文章主要介紹了ThinkPHP進程計數類Process用法,以執行個體形式較為詳細的分析了Process類的定義及進程計數的實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文執行個體講述了ThinkPHP進程計數類Process用法。分享給大家供大家參考。具體如下:

項目中有一個需求:由於某一背景工作比較占頻寬,所以要限制進程數。花了點時間,寫了類,目前版本功能比較簡單。

Process.class.php檔案如下:

<?php/** * Process  *  * @package  * @version $id$ * @copyright 2005-2011 SUCOP.COM * @author Dijia Huang <huangdijia@gmail.com>  * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} */class Process{  const PROCESS_KEY = '~Process';  const PROCESS_MAXNUM = 10;  /**   * start    *    * @static   * @access public   * @return void   */  static public function start(){    $list = self::__getList();    $name = self::__getName();    if(!isset($list[$name])){      $list[$name] = array('count'=>1, 'lasttime'=>time());    }else{      if((time()-$list[$name]['time']) > 600){        $list[$name]['count'] = 1;      }else{        $list[$name]['count'] += 1;      }    }    self::__setList($list);  }  /**   * destory    *    * @static   * @access public   * @return void   */  static public function destory(){    $list = self::__getList();    $name = self::__getName();    if(isset($list[$name])){      if($list[$name]['count'] <= 1){        unset($list[$name]);      }else{        $list[$name]['count'] -= 1;        $list[$name]['lasttime'] = time();      }      self::__setList($list);    }  }  /**   * getCount    *    * @static   * @access public   * @return void   */  static public function getCount(){    $list = self::__getList();    $name = self::__getName();    return $list[$name]['count'];  }  /**   * getMaxnum    *    * @static   * @access public   * @return void   */  static public function getMaxnum(){    $name = self::__getName();    return C($name) ? C($name) : self::PROCESS_MAXNUM;  }  /**   * getName    *    * @static   * @access public   * @return void   */  static public function getName(){    return self::__getName();  }  /**   * isOvertop    *    * @static   * @access public   * @return void   */  static public function isOvertop(){    return (self::getCount() > self::getMaxnum());  }  /**   * getLasttime    *    * @static   * @access public   * @return void   */  static public function getLasttime(){    $list = self::__getList();    $name = self::__getName();    return $list[$name]['lasttime'];  }  /**   * clear    *    * @static   * @access public   * @return void   */  static public function clear(){    F(self::PROCESS_KEY, null);  }  /**   * __setList    *    * @param mixed $list    * @static   * @access private   * @return void   */  static private function __setList($list=null){    if(!is_array($list) || empty($list))      F(self::PROCESS_KEY, null);    else      F(self::PROCESS_KEY, $list);  }  /**   * __getList    *    * @static   * @access private   * @return void   */  static private function __getList(){    $list = F(self::PROCESS_KEY);    if(!is_array($list)) return array();    else return $list;  }  /**   * __getName    *    * @static   * @access private   * @return void   */  static private function __getName(){    return (defined('GROUP_NAME') ? GROUP_NAME.'_' : '') . MODULE_NAME . '_' . ACTION_NAME;  }}?>

調用方法:

<?phpclass IndexAction extends Action {  // 初始化模組  public function _initialize(){    parent::_initialize();    import('@.Util.Process');    Process::start();  }  function __destruct(){    Process :: destory();  }   public function index(){    C('Index_index', 3); // 動態更改限制數, 預設為10    if(Process::isOvertop()) echo "超出限制";    else "未超出限制";  }}?>

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.