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
PHP语法速查表
Jan 02 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
php读取XML的常见方法实例总结
Apr 25 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
May 01 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
yii框架使用分页的方法分析
Jul 25 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 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巧获服务器端信息
2006/12/06 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
2015/12/14 PHP
php实现URL加密解密的方法
2016/11/17 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
优化javascript的执行速度
2010/01/23 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
基于jQuery架构javascript基础体系
2011/01/01 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
Python基于回溯法子集树模板解决数字组合问题实例
2017/09/02 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python 画出来六维图
2019/07/26 Python
Django文件上传与下载(FileFlid)
2019/10/06 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
JD Sports丹麦:英国领先的运动时尚零售商
2020/11/24 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
课程设计感想范文
2015/08/11 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
关于flex 上下文中自动 margin的问题(完整例子)
2021/05/20 HTML / CSS
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python