本文实例讲述了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);elseF(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); // 动态更改限制数, 默认为10if(Process::isOvertop()) echo "超出限制";else "未超出限制";}}?>希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。