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执行速度全攻略
Oct 09 PHP
一个MYSQL操作类
Nov 16 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
PHP数据过滤的方法
Oct 30 PHP
启用Csrf后POST数据时出现的400错误
Jul 05 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php类自动加载器实现方法
Jul 28 PHP
PHP中调用C/C++制作的动态链接库的教程
Mar 10 PHP
PHP的反射机制实例详解
Mar 29 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
Apr 27 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
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
vue 项目build错误异常的解决方法
2019/04/22 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
2019/12/15 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
python爬虫框架talonspider简单介绍
2017/06/09 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
快速了解python leveldb
2018/01/18 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
白宫黑市官网:White House Black Market
2016/11/17 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
会计实习自我鉴定
2013/12/04 职场文书
军训自我鉴定200字
2014/02/13 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
店面销售职位的职责
2014/03/09 职场文书
股东协议书范本
2014/04/14 职场文书
经济贸易专业自荐信
2014/06/11 职场文书
住房租房协议书
2014/08/20 职场文书
报效祖国演讲稿
2014/09/15 职场文书
2014年妇女工作总结
2014/12/06 职场文书
法定代表人资格证明书
2015/06/18 职场文书