本文实例讲述了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 "未超出限制";  }}?>

希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。