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 魔术函数使用说明
May 14 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
php的数组与字符串的转换函数整理汇总
Jul 18 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
php定时执行任务设置详解
Feb 06 PHP
Laravel 5框架学习之表单
Apr 08 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
Sep 11 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
php创建类并调用的实例方法
Sep 25 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分页显示制作详细讲解
2006/10/09 PHP
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
2009/12/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
使用jQuery中的when实现多个AJAX请求对应单个回调的例子分享
2014/04/23 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
2017/03/15 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
中专生毕业自我鉴定
2013/11/01 职场文书
学院书画协会部门岗位职责
2013/12/01 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
领导的自我鉴定
2013/12/28 职场文书
美德好少年主要事迹
2014/01/29 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
环保建议书作文400字
2015/09/14 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
Python实现列表拼接和去重的三种方式
2021/07/02 Python
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫
mysql查找连续出现n次以上的数字
2022/05/11 MySQL