ThinkPHP进程计数类Process用法实例详解
本文实例讲述了ThinkPHP进程计数类Process用法。分享给大家供大家参考。具体如下:
项目中有一个需求:由于某一后台任务比较占带宽,所以要限制进程数。花了点时间,写了类,目前版本功能比较简单。
Process.class.php文件如下:
<?php /** *Process * *@package *@version$id$ *@copyright2005-2011SUCOP.COM *@authorDijiaHuang<huangdijia@gmail.com> *@licensePHPVersion3.0{@linkhttp://www.php.net/license/3_0.txt} */ classProcess { constPROCESS_KEY='~Process'; constPROCESS_MAXNUM=10; /** *start * *@static *@accesspublic *@returnvoid */ staticpublicfunctionstart(){ $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 *@accesspublic *@returnvoid */ staticpublicfunctiondestory(){ $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 *@accesspublic *@returnvoid */ staticpublicfunctiongetCount(){ $list=self::__getList(); $name=self::__getName(); return$list[$name]['count']; } /** *getMaxnum * *@static *@accesspublic *@returnvoid */ staticpublicfunctiongetMaxnum(){ $name=self::__getName(); returnC($name)?C($name):self::PROCESS_MAXNUM; } /** *getName * *@static *@accesspublic *@returnvoid */ staticpublicfunctiongetName(){ returnself::__getName(); } /** *isOvertop * *@static *@accesspublic *@returnvoid */ staticpublicfunctionisOvertop(){ return(self::getCount()>self::getMaxnum()); } /** *getLasttime * *@static *@accesspublic *@returnvoid */ staticpublicfunctiongetLasttime(){ $list=self::__getList(); $name=self::__getName(); return$list[$name]['lasttime']; } /** *clear * *@static *@accesspublic *@returnvoid */ staticpublicfunctionclear(){ F(self::PROCESS_KEY,null); } /** *__setList * *@parammixed$list *@static *@accessprivate *@returnvoid */ staticprivatefunction__setList($list=null){ if(!is_array($list)||empty($list)) F(self::PROCESS_KEY,null); else F(self::PROCESS_KEY,$list); } /** *__getList * *@static *@accessprivate *@returnvoid */ staticprivatefunction__getList(){ $list=F(self::PROCESS_KEY); if(!is_array($list))returnarray(); elsereturn$list; } /** *__getName * *@static *@accessprivate *@returnvoid */ staticprivatefunction__getName(){ return(defined('GROUP_NAME')?GROUP_NAME.'_':'').MODULE_NAME.'_'.ACTION_NAME; } } ?>
调用方法:
<?php classIndexActionextendsAction { //初始化模块 publicfunction_initialize(){ parent::_initialize(); import('@.Util.Process'); Process::start(); } function__destruct(){ Process::destory(); } publicfunctionindex(){ C('Index_index',3);//动态更改限制数,默认为10 if(Process::isOvertop())echo"超出限制"; else"未超出限制"; } } ?>
希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。