ThinkPHPプロセスカウントクラスProcess使用例の詳細
4661 ワード
この例では、ThinkPHPプロセスカウントクラスProcessの使用例について説明します.皆さんの参考にしてください.具体的には以下の通りです.
プロジェクトには、バックグラウンド・タスクが帯域幅を占めているため、プロセス数を制限する必要があります.時間をかけてクラスを書きましたが、現在のバージョンは機能が簡単です.
Process.class.phpファイルは次のとおりです.
呼び出し方法:
本明細書では、ThinkPHPフレームワークに基づくphpプログラムの設計に役立つことを期待します.
プロジェクトには、バックグラウンド・タスクが帯域幅を占めているため、プロセス数を制限する必要があります.時間をかけてクラスを書きましたが、現在のバージョンは機能が簡単です.
Process.class.phpファイルは次のとおりです.
* @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;
}
}
?>
呼び出し方法:
本明細書では、ThinkPHPフレームワークに基づくphpプログラムの設計に役立つことを期待します.