首頁 > 後端開發 > php教程 > 關於ThinkPHP進程計數類別Process的用法

關於ThinkPHP進程計數類別Process的用法

不言
發布: 2023-03-30 20:42:02
原創
1571 人瀏覽過

這篇文章主要介紹了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 = &#39;~Process&#39;;
  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(&#39;count&#39;=>1, &#39;lasttime&#39;=>time());
    }else{
      if((time()-$list[$name][&#39;time&#39;]) > 600){
        $list[$name][&#39;count&#39;] = 1;
      }else{
        $list[$name][&#39;count&#39;] += 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][&#39;count&#39;] <= 1){
        unset($list[$name]);
      }else{
        $list[$name][&#39;count&#39;] -= 1;
        $list[$name][&#39;lasttime&#39;] = time();
      }
      self::__setList($list);
    }
  }
  /**
   * getCount 
   * 
   * @static
   * @access public
   * @return void
   */
  static public function getCount(){
    $list = self::__getList();
    $name = self::__getName();
    return $list[$name][&#39;count&#39;];
  }
  /**
   * 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][&#39;lasttime&#39;];
  }
  /**
   * 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(&#39;GROUP_NAME&#39;) ? GROUP_NAME.&#39;_&#39; : &#39;&#39;) . MODULE_NAME . &#39;_&#39; . ACTION_NAME;
  }
}
?>
登入後複製

#呼叫方法:

##
<?php
class IndexAction extends Action 
{
  // 初始化模块
  public function _initialize(){
    parent::_initialize();
    import(&#39;@.Util.Process&#39;);
    Process::start();
  }
  function __destruct(){
    Process :: destory();
  } 
  public function index(){
    C(&#39;Index_index&#39;, 3); // 动态更改限制数, 默认为10
    if(Process::isOvertop()) echo "超出限制";
    else "未超出限制";
  }
}
?>
登入後複製

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

Thinkphp 中distinct 的用法


關於thinkPHP框架新增js事件分頁類別customPage.class. php的分析


關於ThinkPHP中create()方法的自動驗證


以上是關於ThinkPHP進程計數類別Process的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板