private function init() { if (!$this->gearmanTaskPool) { $this->gearmanTaskPool = new GearmanTaskPool(); $this->gearmanTaskPool->setServers($this->servers); $this->gearmanTaskPool->setMaxTasks($this->maxTasks); $this->gearmanTaskPool->setTaskCallback([$this, '_onTask']); $this->gearmanTaskPool->setFunctionName($this->functionName); $this->gearmanTaskPool->setWorkloadCallback(function () { $url = $this->repository->next(); return $url ? GearmanToolsUtils::packMessage($url) : false; }); } }
public function run(\GearmanJob $job) { $url = GearmanToolsUtils::unpackMessage($job->workload()); $error = 0; try { $this->processorPool->process($url); $extractedUrlsCount = count($this->processorPool->getExtractedUrls()); $message = "{$url->getUrl()} / depth: {$url->getDepth()} / status: {$url->getStatus()} / extracted: {$extractedUrlsCount}"; } catch (\Exception $e) { $message = "Failed to process url [{$url->getId()}] \"{$url->getUrl()}\": {$e->getMessage()}"; $error = $e->getCode(); $error = $error === 0 ? -1 : $error; } $result = ['url' => $url, 'extractedUrls' => $this->processorPool->getExtractedUrls(), 'error' => $error, 'message' => $message]; $this->logger->info($message); $result = GearmanToolsUtils::packMessage($result); return $result; }