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 文章采集正则代码
Dec 28 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
PHP修改session_id示例代码
Jan 08 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
PHP递归创建多级目录
Nov 05 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
php实现头像上传预览功能
Apr 27 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
Thinkphp5框架异常处理操作实例分析
Jun 03 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
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
JavaScript开发时的五个注意事项
2007/12/08 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
js面向对象的写法
2016/02/19 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
2018/06/25 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
Python反转序列的方法实例分析
2018/03/21 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
Python基于callable函数检测对象是否可被调用
2020/10/16 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
教你打造完美的创业计划书
2014/01/06 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
企业2014年度工作总结
2014/12/10 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
优秀英文求职信范文
2015/03/19 职场文书
消防验收申请报告
2015/05/15 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS