scan(); while (true) { pcntl_signal_dispatch(); if ($this->_stop) break; try { $content = $worker->pop($queues, 1); $start = microtime(true); $mem = memory_get_usage(); if (is_array($content)) { $method = key($content); $arg = current($content); if(!method_exists($logic_queue,$method)) { $msg = sprintf("method=$method not exist memory=$mem time=%.6f\r\n\r\n",microtime(true) - $start); Log::record($msg ,Log::DEBUG); continue; } $result = $logic_queue->$method($arg); if(is_array($result)) { Log::record($result['msg'] ?? '', Log::DEBUG); } $msg = sprintf("method=$method memory=$mem time=%.6f\r\n\r\n",microtime(true) - $start); Log::record($msg ,Log::DEBUG); } } catch (Exception $e) { $err = $e->getMessage(); $code = $e->getCode(); Log::record("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; } } }