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


Posted in PHP onSeptember 25, 2015

本文实例讲述了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 相关文章推荐
PHP无刷新上传文件实现代码
Sep 19 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
smarty基础之拼接字符串的详解
Jun 18 PHP
PHP中判断变量为空的几种方法小结
Nov 12 PHP
PHP实现获取图片颜色值的方法
Jul 11 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
PHP图像识别技术原理与实现
Oct 27 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 PHP
PHP count()函数讲解
Feb 03 PHP
PHP经典设计模式之依赖注入定义与用法详解
May 21 PHP
php实现的Curl封装类Curl.class.php用法实例分析
Sep 25 #PHP
php实现的微信红包算法分析(非官方)
Sep 25 #PHP
PHP简单实现断点续传下载的方法
Sep 25 #PHP
分享3个php获取日历的函数
Sep 25 #PHP
PHP中配置IIS7实现基本身份验证的方法
Sep 24 #PHP
常见PHP数据库解决方案分析介绍
Sep 24 #PHP
又十个超级有用的PHP代码片段
Sep 24 #PHP
You might like
博士208HAF收音机实习报告
2021/03/02 无线电
一个MYSQL操作类
2006/11/16 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
vue中appear的用法
2017/08/17 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python中tab键是什么意思
2020/06/18 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
python生成word合同的实例方法
2021/01/12 Python
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
工商管理应届生求职信
2013/10/07 职场文书
酒店总经理助理职责
2014/02/12 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
舞蹈专业求职信
2014/06/13 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
护士求职自荐信
2015/03/25 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript