Maison  >  Article  >  développement back-end  >  À propos de l'utilisation de la classe de comptage de processus ThinkPHP

À propos de l'utilisation de la classe de comptage de processus ThinkPHP

不言
不言original
2018-06-08 16:12:241565parcourir

Cet article présente principalement l'utilisation de la classe de comptage de processus ThinkPHP Process. Il analyse en détail la définition de la classe Process et les techniques de mise en œuvre du comptage de processus sous forme d'exemples. référez-vous à lui

L'exemple dans cet article décrit l'utilisation de la classe de comptage de processus ThinkPHP Process. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

Il y a une exigence dans le projet : parce qu'une certaine tâche en arrière-plan consomme plus de bande passante, le nombre de processus doit être limité. Il m'a fallu un certain temps pour écrire la classe et la version actuelle a des fonctions relativement simples.

Le fichier Process.class.php est le suivant :

<?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;
  }
}
?>

Méthode d'appel :

<?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 "未超出限制";
  }
}
?>

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois. !

Recommandations associées :

Utilisation de distinct dans Thinkphp

À propos du framework thinkPHP ajoutant la classe de pagination d'événements js customPage.class. Analyse de php

À propos de la vérification automatique de la méthode create() dans ThinkPHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn