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 相关文章推荐
Get或Post提交值的非法数据处理
Oct 09 PHP
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
Jul 09 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
php导出excel格式数据问题
Mar 11 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
php命令行用法入门实例教程
Oct 27 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
Apr 21 PHP
php关闭warning问题的解决方法
May 17 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 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
关于php连接mssql:pdo odbc sql server
2011/07/20 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
js变量以及其作用域详解
2020/07/18 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
2014/06/06 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
浅谈vue项目重构技术要点和总结
2018/01/23 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
2018/05/15 NodeJs
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
每天学点Vue源码之vm.$mount挂载函数
2019/03/11 Javascript
JS数组属性去重并校验重复数据
2020/01/10 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python生成特定分布数的实例
2019/12/05 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
协议书怎么写
2014/04/21 职场文书
高中学生期末评语
2014/04/25 职场文书
社保委托书怎么写
2014/08/02 职场文书
在容器中使用nginx搭建上传下载服务器
2022/05/11 Servers