scan(); $empty_times = 0; while (true) { pcntl_signal_dispatch(); try { if ($this->_stop) break; $content = $worker->pop($queues, 1); if(is_array($content)) { $method = key($content); $arg = current($content); $argstr = json_encode($arg,JSON_UNESCAPED_UNICODE); Log::record("method={$method} args={$argstr}",Log::DEBUG); $result = $logic_queue->$method($arg); if (!$result['state']) { Log::record("{$method} run error: {$result['msg']}",Log::ERR); } $empty_times = 0; } else { $empty_times ++; if($empty_times > 600) { $model = Model(); $model->checkActive(); unset($model); $empty_times = 0; } } } catch (Exception $e) { $err = $e->getMessage(); $code = $e->getCode(); Log::record("QueueDB pop err: code={$code} err={$err}",Log::ERR); break; } } } private function sig_handler($signo) { Log::record("queue quit at sig_handler.",Log::DEBUG); switch($signo) { case SIGINT: case SIGHUP: case SIGQUIT: case SIGTERM: $this->_stop = true; break; default: break; } } }