首页 > 开发 > PHP > 正文

ThinkPHP进程计数类Process用法实例详解

2024-05-04 23:39:13
字体:
来源:转载
供稿:网友

这篇文章主要介绍了ThinkPHP进程计数类Process用法,以实例形式较为详细的分析了Process类的定义及进程计数的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了ThinkPHP进程计数类Process用法。分享给大家供大家参考。具体如下:

项目中有一个需求:由于某一后台任务比较占带宽,所以要限制进程数。花了点时间,写了类,目前版本功能比较简单。

Process.class.php文件如下:

 

 
  1. <?php 
  2. /** 
  3. * Process  
  4.  
  5. * @package  
  6. * @version $id$ 
  7. * @copyright 2005-2011 SUCOP.COM 
  8. * @author Dijia Huang <huangdijia@gmail.com>  
  9. * @license PHP Version 3.0 {@link http://www.php.net/license/3_0.txt} 
  10. */ 
  11. class Process 
  12. const PROCESS_KEY = '~Process'
  13. const PROCESS_MAXNUM = 10; 
  14. /** 
  15. * start  
  16.  
  17. * @static 
  18. * @access public 
  19. * @return void 
  20. */ 
  21. static public function start(){ 
  22. $list = self::__getList(); 
  23. $name = self::__getName(); 
  24. if(!isset($list[$name])){ 
  25. $list[$name] = array('count'=>1, 'lasttime'=>time()); 
  26. }else
  27. if((time()-$list[$name]['time']) > 600){ 
  28. $list[$name]['count'] = 1; 
  29. }else
  30. $list[$name]['count'] += 1; 
  31. self::__setList($list); 
  32. /** 
  33. * destory  
  34.  
  35. * @static 
  36. * @access public 
  37. * @return void 
  38. */ 
  39. static public function destory(){ 
  40. $list = self::__getList(); 
  41. $name = self::__getName(); 
  42. if(isset($list[$name])){ 
  43. if($list[$name]['count'] <= 1){ 
  44. unset($list[$name]); 
  45. }else
  46. $list[$name]['count'] -= 1; 
  47. $list[$name]['lasttime'] = time(); 
  48. self::__setList($list); 
  49. /** 
  50. * getCount  
  51.  
  52. * @static 
  53. * @access public 
  54. * @return void 
  55. */ 
  56. static public function getCount(){ 
  57. $list = self::__getList(); 
  58. $name = self::__getName(); 
  59. return $list[$name]['count']; 
  60. /** 
  61. * getMaxnum  
  62.  
  63. * @static 
  64. * @access public 
  65. * @return void 
  66. */ 
  67. static public function getMaxnum(){ 
  68. $name = self::__getName(); 
  69. return C($name) ? C($name) : self::PROCESS_MAXNUM; 
  70. /** 
  71. * getName  
  72.  
  73. * @static 
  74. * @access public 
  75. * @return void 
  76. */ 
  77. static public function getName(){ 
  78. return self::__getName(); 
  79. /** 
  80. * isOvertop  
  81.  
  82. * @static 
  83. * @access public 
  84. * @return void 
  85. */ 
  86. static public function isOvertop(){ 
  87. return (self::getCount() > self::getMaxnum()); 
  88. /** 
  89. * getLasttime  
  90.  
  91. * @static 
  92. * @access public 
  93. * @return void 
  94. */ 
  95. static public function getLasttime(){ 
  96. $list = self::__getList(); 
  97. $name = self::__getName(); 
  98. return $list[$name]['lasttime']; 
  99. /** 
  100. * clear  
  101.  
  102. * @static 
  103. * @access public 
  104. * @return void 
  105. */ 
  106. static public function clear(){ 
  107. F(self::PROCESS_KEY, null); 
  108. /** 
  109. * __setList  
  110.  
  111. * @param mixed $list  
  112. * @static 
  113. * @access private 
  114. * @return void 
  115. */ 
  116. static private function __setList($list=null){ 
  117. if(!is_array($list) || empty($list)) 
  118. F(self::PROCESS_KEY, null); 
  119. else 
  120. F(self::PROCESS_KEY, $list); 
  121. /** 
  122. * __getList  
  123.  
  124. * @static 
  125. * @access private 
  126. * @return void 
  127. */ 
  128. static private function __getList(){ 
  129. $list = F(self::PROCESS_KEY); 
  130. if(!is_array($list)) return array(); 
  131. else return $list; 
  132. /** 
  133. * __getName  
  134.  
  135. * @static 
  136. * @access private 
  137. * @return void 
  138. */ 
  139. static private function __getName(){ 
  140. return (defined('GROUP_NAME') ? GROUP_NAME.'_' : '') . MODULE_NAME . '_' . ACTION_NAME; 
  141. ?> 

调用方法:

 

 
  1. <?php 
  2. class IndexAction extends Action  
  3. // 初始化模块 
  4. public function _initialize(){ 
  5. parent::_initialize(); 
  6. import('@.Util.Process'); 
  7. Process::start(); 
  8. function __destruct(){ 
  9. Process :: destory(); 
  10. }  
  11. public function index(){ 
  12. C('Index_index', 3); // 动态更改限制数, 默认为10 
  13. if(Process::isOvertop()) echo "超出限制"
  14. else "未超出限制"
  15. ?> 

希望本文所述对大家基于ThinkPHP框架的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表