php教程

超轻量级php框架startmvc

ThinkPHP进程计数类Process用法实例详解

更新时间:2020-03-05 20:09:57 作者:startmvc
本文实例讲述了ThinkPHP进程计数类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;
 }
}
?>

调用方法:


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

ThinkPHP 进程计数类 Process