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 配置文件中open_basedir选项作用
Jul 19 PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
Nov 03 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP进程通信基础之信号
Feb 19 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
php 猴子摘桃的算法
Jun 20 PHP
php异常处理捕获错误整理
Sep 23 PHP
PHP单元测试配置与使用方法详解
Dec 27 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中防止SQL注入实现代码
2011/02/19 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
python中lambda()的用法
2017/11/16 Python
python 日志增量抓取实现方法
2018/04/28 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
Django之模板层的实现代码
2019/09/09 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
大学生毕业自我评价范文分享
2013/11/07 职场文书
销售实习自我鉴定
2013/12/07 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
初二英语教学反思
2016/02/15 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏