ThinkPHP进程计数类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程序设计有所帮助。

(0)

相关推荐

  • thinkPHP简单调用函数与类库的方法

    本文实例讲述了thinkPHP调用函数与类库的方法.分享给大家供大家参考,具体如下: 手册上说的很冗余,没看懂,下面简单的讲一下具体用法. 函数调用: lib公共函数库叫 common.php App/common/common.php 分组模块下的公共函数库叫 function.php App/Modules/Admin/common/function.php 类库调用: class IndexAction extends Action{ public function index(){ //

  • ThinkPHP文件缓存类代码分享

    取自ThinkPHP的文件缓存类代码,这里就不多废话了,小伙伴们自己看注释吧. <?php /** * @desc 文件缓存 */ class Cache{ const C_FILE = '/Runtime/'; private $dir = ''; const EXT = '.tpl'; private $filename = ''; public function __construct($dir = ''){ $this->dir = $dir; } /** * @desc 设置文件缓存

  • thinkphp实现无限分类(使用递归)

    本文实例为大家分享了thinkphp实现无限分类的详细代码,希望对大家学习无限分类有所启发. 数据库:test 数据表:(tp_category): Common/conf/config.php 'DB_CONFIG2' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name'

  • 获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)

    THINKphp里面有调试运行状态的效果: Process:0.2463s (Load:0.0003s Init:0.0010s Exec:0.1095s Template:0.1355s )|DB:13 queries 0 writes| Cache:2 gets,0 writes|UseMem:415 kb|LoadFile:20|CallFun:63,1370 代表的含义: 运行信息: 整体执行时间0.2463s ( 加载:0.0003s 初始化:0.0010s 执行:0.1095s 模板

  • ThinkPHP分组下自定义标签库实例

    本文实例讲述了ThinkPHP分组下自定义标签库的实现方法.分享给大家供大家参考.具体如下: 自定义标签库应该位于ThinkPHP\\Extend\\Driver\\TagLib目录下 1 新建标签类库文件名为TagLibBlog.class.php. 2 编辑刚才新建的类库文件,新建一个类,继承TagLib父类 复制代码 代码如下: import('TagLib'); class TagLibBlog extends TagLib { } 3 在类中声明一个protected成员变量$tags

  • ThinkPHP调用common/common.php函数提示错误function undefined的解决方法

    本文主要介绍了ThinkPHP调用common/common.php函数提示错误function undefined的解决方法.对于采用ThinkPHP进行项目开发的朋友来说,在进行ThinkPHP升级后经常会遇到这类问题.具体描述如下: 在对ThinkPHP升级后使用了最新的ThinkPHP3.2版本,将通用的函数放到了common/common.php中,但是在具体页面调用函数时出现了function undefined的错误提示. 在查看了官方文档后发现,原来ThinkPHP3.2版本co

  • thinkPHP2.1自定义标签库的导入方法详解

    本文详细讲述了thinkPHP2.1自定义标签库的导入方法.分享给大家供大家参考,具体如下: TP的手册似乎跟不上节奏, 对自定义标签只是寥寥几句, 摸索了N久, 终于将自定义的标签进行了导入. 心得如下: 1. 情况:  新建自定义的标签库类: @.Mylib.Tag.TagLibTest - 懂TP的应该知道这代表的路径 使用Examples下的Tag演示文件 <?php // +--------------------------------------------------------

  • Thinkphp调用Image类生成缩略图的方法

    本文实例讲述了Thinkphp调用Image类生成缩略图的方法.分享给大家供大家参考.具体分析如下: Thinkphp的Image类 在ThinkPHP/Extend/Library/ORG/Util/Image.class.php中. 调用方法如下: import("ORG.Util.Image"); $Img = new Image();//实例化图片类对象 $image_path = './图片路径'; //若当前php文件在Thinkphp的中APP_PATH路径中 //'./

  • thinkPHP引入类的方法详解

    本文实例讲述了thinkPHP引入类的方法.分享给大家供大家参考,具体如下: 这里以发送邮件类phpmailer为例 1.将核心文件放入ORG目录下 2.在使用的地方,引入这个类文件 如何引入呢? import('@.ORG.phpmailer'); 这个表示引入当前项目中的ORG中的phpmailer.class.php文件 3.引入之后就可以使用文件中的类了 public function sendEmail() { import('@.ORG.phpmailer'); $mail = ne

  • ThinkPHP使用UTFWry地址库进行IP定位实例

    可以在官网的 http://www.thinkphp.cn/extend/223.html下载IP定位扩展类库,或者下载扩展包( http://www.thinkphp.cn/down/253.html)里面也已经包含该扩展类了.如果是单独下载的上传类库,把解压后的IpLocation.class.php 放入ThinkPHP/Extend/Library/ORG/Net/(如果没有请手动创建)目录下面. 一.获取IP地址 如果你仅仅需要获取用户访问的IP地址,那么直接使用系统内置的get_cl

  • ThinkPHP调用百度翻译类实现在线翻译

    要实现ThinkPHP在线翻译功能,需要先在百度开发者中心注册一个API key,具体实现代码如下: action代码部分: <?php class FanyiAction extends Action { public function _empty(){ header("HTTP/1.0 404 Not Found"); $this->display("Public:404"); } public function index() { $User =

  • thinkphp跨库操作的简单代码实例

    实例一:配置config.php文件配置多个数据库配置 'DB_CONFIG2' => 'mysql://root:1234@localhost:3306/thinkphp', 控制器中调用方法: $New = M('表名','前缀没前缀不填写','DB_CONFIG2'); 这里相当于从新连接了数据库远程跨库如果是在同一个服务器数据库可以直接切换: $User = M('数据库名.表名','前缀没有可不填'); 实例二:Model模型中的跨库以下代码填写到模型类中 protected $con

  • thinkPHP自定义类实现方法详解

    本文实例讲述了thinkPHP自定义类实现方法.分享给大家供大家参考,具体如下: 1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Customer/Interface'; public function test() { $post_data['action'] = 'sadf'; $post_data['callback'] = '?'; $res = r

随机推荐