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闭包(Closure)使用详解
May 02 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
PHP屏蔽关键字实现方法
Nov 17 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 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
基于MySQL体系结构的分析
2013/05/02 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
php计算到指定日期还有多少天的方法
2015/04/14 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
仿163填写邮件地址自动显示下拉(无优化)
2008/11/05 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
angular5 子组件监听父组件传入值的变化方法
2018/09/30 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
Python中查看文件名和文件路径
2017/03/31 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python生成带有表格的图片实例
2019/02/03 Python
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
综合素质的自我鉴定
2013/10/07 职场文书
总经理助理岗位职责
2013/11/08 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
国王的演讲观后感
2015/06/03 职场文书
小学见习报告
2015/06/23 职场文书
2015年公路路政个人工作总结
2015/07/24 职场文书