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

5年以前  |  阅读数:863 次  |  编程语言:PHP 

本文实例讲述了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程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例