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+MySQL的聊天室设计
Oct 09 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
Aug 19 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
php获取POST数据的三种方法实例详解
Dec 20 PHP
PHP ADODB生成HTML表格函数rs2html功能【附错误处理函数用法】
May 29 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
PHP7 其他修改
Mar 09 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函数与传递参数实例分析
2014/11/15 PHP
PHP使用递归生成文章树
2015/04/21 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
laravel按天、按小时,查询数据的实例
2019/10/09 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
jquery获取当前日期的方法
2015/01/14 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
node.js的事件机制
2017/02/08 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
js实现简单页面全屏
2019/09/17 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
Python切片工具pillow用法示例
2018/03/30 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
Python 的AES加密与解密实现
2019/07/09 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
django admin 添加自定义链接方式
2020/03/11 Python
python如何导入依赖包
2020/07/13 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
C/C++程序员常见面试题二
2015/11/19 面试题
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
内容编辑个人求职信
2013/12/10 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
教师自我反思材料
2014/02/14 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
个人整改措施书面材料
2014/10/24 职场文书
教师先进事迹材料
2014/12/16 职场文书
夫妻吵架保证书
2015/05/08 职场文书
聘任书格式及范文
2015/09/21 职场文书
2019同学聚会主持词
2019/05/06 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js