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导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php发送短信验证码完成注册功能
Nov 24 PHP
php连接微软MSSQL(sql server)完全攻略
Nov 27 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
PDO::errorCode讲解
Jan 28 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
PHP5 安装方法
2006/10/09 PHP
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
php链表用法实例分析
2015/07/09 PHP
非常有用的9个PHP代码片段
2016/04/06 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
一些有关检查数据的JS代码
2006/09/07 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
7个JS基础知识总结
2014/03/05 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
Python读取txt某几列绘图的方法
2018/10/14 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
Python常见数字运算操作实例小结
2019/03/22 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Python高级property属性用法实例分析
2019/11/19 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
高中自我评价范文
2014/01/27 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
行政内勤岗位职责
2014/04/07 职场文书
后勤工作个人总结
2015/02/28 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL