当前位置:首页 > CMS教程 > Thinkphp > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-19 19:40:53 浏览: 评论:0 

这篇文章主要介绍了ThinkPHP进程计数类Process用法,以实例形式较为详细的分析了Process类的定义及进程计数的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了ThinkPHP进程计数类Process用法。分享给大家供大家参考。具体如下:

项目中有一个需求:由于某一后台任务比较占带宽,所以要限制进程数。花了点时间,写了类,目前版本功能比较简单。

Process.class.php文件如下:

  1. <?php 
  2. /** 
  3.  * Process  
  4.  *  
  5.  * @package  
  6.  * @version $id$ 
  7.  * @copyright 2005-2011 SUCOP.COM 
  8.  * @author Dijia Huang <huangdijia@gmail.com>  
  9.  * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} 
  10.  */ 
  11. class Process 
  12.   const PROCESS_KEY = '~Process'
  13.   const PROCESS_MAXNUM = 10; 
  14.   /** 
  15.    * start  
  16.    *  
  17.    * @static 
  18.    * @access public 
  19.    * @return void 
  20.    */ 
  21.   static public function start(){ 
  22.     $list = self::__getList(); 
  23.     $name = self::__getName(); 
  24.     if(!isset($list[$name])){ 
  25.       $list[$name] = array('count'=>1, 'lasttime'=>time()); 
  26.     }else
  27.       if((time()-$list[$name]['time']) > 600){ 
  28.         $list[$name]['count'] = 1; 
  29.       }else
  30.         $list[$name]['count'] += 1; 
  31.       } 
  32.     } 
  33.     self::__setList($list); 
  34.   } 
  35.   /** 
  36.    * destory  
  37.    *  
  38.    * @static 
  39.    * @access public 
  40.    * @return void 
  41.    */ 
  42.   static public function destory(){ 
  43.     $list = self::__getList(); 
  44.     $name = self::__getName(); 
  45.     if(isset($list[$name])){ 
  46.       if($list[$name]['count'] <= 1){ 
  47.         unset($list[$name]); 
  48.       }else
  49.         $list[$name]['count'] -= 1; 
  50.         $list[$name]['lasttime'] = time(); 
  51.       } 
  52.       self::__setList($list); 
  53.     } 
  54.   } 
  55.   /** 
  56.    * getCount  
  57.    *  
  58.    * @static 
  59.    * @access public 
  60.    * @return void 
  61.    */ 
  62.   static public function getCount(){ 
  63.     $list = self::__getList(); 
  64.     $name = self::__getName(); 
  65.     return $list[$name]['count']; 
  66.   } 
  67.   /** 
  68.    * getMaxnum  
  69.    *  
  70.    * @static 
  71.    * @access public 
  72.    * @return void 
  73.    */ 
  74.   static public function getMaxnum(){ 
  75.     $name = self::__getName(); 
  76.     return C($name) ? C($name) : self::PROCESS_MAXNUM; 
  77.   } 
  78.   /** 
  79.    * getName  
  80.    *  
  81.    * @static 
  82.    * @access public 
  83.    * @return void 
  84.    */ 
  85.   static public function getName(){ 
  86.     return self::__getName(); 
  87.   } 
  88.   /** 
  89.    * isOvertop  
  90.    *  
  91.    * @static 
  92.    * @access public 
  93.    * @return void 
  94.    */ 
  95.   static public function isOvertop(){ 
  96.     return (self::getCount() > self::getMaxnum()); 
  97.   } 
  98.   /** 
  99.    * getLasttime  
  100.    *  
  101.    * @static 
  102.    * @access public 
  103.    * @return void 
  104.    */ 
  105.   static public function getLasttime(){ 
  106.     $list = self::__getList(); 
  107.     $name = self::__getName(); 
  108.     return $list[$name]['lasttime']; 
  109.   } 
  110.   /** 
  111.    * clear  
  112.    *  
  113.    * @static 
  114.    * @access public 
  115.    * @return void 
  116.    */ 
  117.   static public function clear(){ 
  118.     F(self::PROCESS_KEY, null); 
  119.   } 
  120.   /** 
  121.    * __setList  
  122.    *  
  123.    * @param mixed $list  
  124.    * @static 
  125.    * @access private 
  126.    * @return void 
  127.    */ 
  128.   static private function __setList($list=null){ 
  129.     if(!is_array($list) || emptyempty($list)) 
  130.       F(self::PROCESS_KEY, null); 
  131.     else 
  132.       F(self::PROCESS_KEY, $list); 
  133.   } 
  134.   /** 
  135.    * __getList  
  136.    *  
  137.    * @static 
  138.    * @access private 
  139.    * @return void 
  140.    */ 
  141.   static private function __getList(){ 
  142.     $list = F(self::PROCESS_KEY); 
  143.     if(!is_array($list)) return array(); 
  144.     else return $list
  145.   } 
  146.   /** 
  147.    * __getName  
  148.    *  
  149.    * @static 
  150.    * @access private 
  151.    * @return void 
  152.    */ 
  153.   static private function __getName(){ 
  154.     return (defined('GROUP_NAME') ? GROUP_NAME.'_' : '') . MODULE_NAME . '_' . ACTION_NAME; 
  155.   } 
  156. ?> 

调用方法:

  1. <?php 
  2. class IndexAction extends Action  
  3.   // 初始化模块 
  4.   public function _initialize(){ 
  5.     parent::_initialize(); 
  6.     import('@.Util.Process'); 
  7.     Process::start(); 
  8.   } 
  9.   function __destruct(){ 
  10.     Process :: destory(); 
  11.   }  
  12.   public function index(){ 
  13.     C('Index_index', 3); // 动态更改限制数, 默认为10 
  14.     if(Process::isOvertop()) echo "超出限制"
  15.     else "未超出限制"
  16.   } 
  17. ?> 

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

Tags: ThinkPHP进程 Process

分享到: