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程序设计有所帮助。