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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
一个可以找出源代码中所有中文的工具
Oct 25 PHP
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
php array_intersect()函数使用代码
Jan 14 PHP
php mysql Errcode: 28 终极解决方法
Jul 01 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
PHP数据库调用类调用实例(详细注释)
Jul 12 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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和XSS跨站攻击的防范
2007/04/17 PHP
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
vue-for循环嵌套操作示例
2019/01/28 Javascript
Django 中使用流响应处理视频的方法
2018/07/20 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
python中with用法讲解
2020/02/07 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
后勤工作职责
2013/12/22 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
求职个人评价范文
2014/04/09 职场文书
企业指导教师评语
2014/04/28 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
逃课检讨书怎么写
2015/01/01 职场文书
白银帝国观后感
2015/06/17 职场文书
陪护人员误工证明
2015/06/24 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
小学班级口号大全
2015/12/25 职场文书
《我是什么》教学反思
2016/02/16 职场文书
竞聘书的秘诀
2019/04/02 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP