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 curl_setopt()函数实例代码与参数分析
Jun 02 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
PDO的安全处理与事物处理方法
Oct 31 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
PHP命令Command模式用法实例分析
Aug 08 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 ftp文件上传函数(基础版)
2010/06/03 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
PHP实现RTX发送消息提醒的实例代码
2017/01/03 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
Vue2递归组件实现树形菜单
2017/04/10 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
2019/01/25 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
python写xml文件的操作实例
2014/10/05 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
用Python写冒泡排序代码
2016/04/12 Python
详解python中的线程
2018/02/10 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
农民工创业典型事迹
2014/01/25 职场文书
生物制药自我鉴定
2014/01/25 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
MySQL如何使备份得数据保持一致
2022/05/02 MySQL