ThinkPHP进程计数类Process用法实例详解

 更新时间:2015年09月25日 11:27:24   作者:deeka  
这篇文章主要介绍了ThinkPHP进程计数类Process用法,以实例形式较为详细的分析了Process类的定义及进程计数的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了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实现下载远程图片保存到本地的方法

    本篇文章主要介绍了PHP实现下载远程图片的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • phpQuery让php处理html代码像jQuery一样方便

    phpQuery让php处理html代码像jQuery一样方便

    这篇文章主要介绍了phpQuery让php处理html代码像jQuery一样方便,需要的朋友可以参考下
    2015-01-01
  • thinkphp数据查询和遍历数组实例

    thinkphp数据查询和遍历数组实例

    这篇文章主要介绍了thinkphp数据查询和遍历数组的方法,包括数据库的DSN方法配置、CURD操作方法以及模板的遍历数组等技巧,具有一定的借鉴价值,需要的朋友可以参考下
    2014-11-11
  • thinkPHP线上自动加载异常与修复方法实例分析

    thinkPHP线上自动加载异常与修复方法实例分析

    这篇文章主要介绍了thinkPHP线上自动加载异常与修复方法,结合实例形式分析了针对服务器代码不支持斜杠方式的情况下相关处理技巧,需要的朋友可以参考下
    2016-12-12
  • php函数usort使用方法示例详解

    php函数usort使用方法示例详解

    在 PHP 中, usort() 函数用于对数组进行排序,它允许你使用自定义的比较函数来确定元素的顺序,本文给大家介绍php函数usort使用方法,感兴趣的朋友跟随小编一起看看吧
    2023-09-09
  • 浅谈PHP5.6 与 PHP7.0 区别

    浅谈PHP5.6 与 PHP7.0 区别

    这篇文章主要介绍了浅谈PHP5.6 与 PHP7.0 区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 基于PHP实现微信小程序客服消息功能

    基于PHP实现微信小程序客服消息功能

    本项目是一个简单微信小程序客服消息类,实现客服消息相关功能。本示例是采用开发者服务器,没有采用云调用的形式。具体实例代码大家跟随小编一起看看吧
    2019-08-08
  • php无限遍历目录示例

    php无限遍历目录示例

    这篇文章主要介绍了php无限遍历目录示例,需要的朋友可以参考下
    2014-02-02
  • 关于二级目录拖拽排序的实现(源码示例下载)

    关于二级目录拖拽排序的实现(源码示例下载)

    本篇文章介绍了,关于二级目录拖拽排序的实现(源码示例下载)。需要的朋友参考下
    2013-04-04
  • PHP7 安装event扩展的实现方法

    PHP7 安装event扩展的实现方法

    这篇文章主要介绍了PHP7 安装event扩展的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论