/** * Run a set of tasks * * @param object $set A set of tasks to run * @param int $timeout Time in seconds for the socket timeout. Max is 10 seconds * * @return void * @see Net_Gearman_Set, Net_Gearman_Task */ public function runSet(Net_Gearman_Set $set, $timeout = null) { $this->set = $set; $totalTasks = $this->set->tasksCount; $taskKeys = array_keys($this->set->tasks); $t = 0; if ($timeout !== null) { $socket_timeout = min(10, (int) $timeout); } else { $socket_timeout = 10; } while (!$this->set->finished()) { if ($timeout !== null) { if (empty($start)) { $start = microtime(true); } else { $now = microtime(true); if ($now - $start >= $timeout) { break; } } } if ($t < $totalTasks) { $k = $taskKeys[$t]; $this->submitTask($this->set->tasks[$k]); if ($this->set->tasks[$k]->type == Net_Gearman_Task::JOB_BACKGROUND || $this->set->tasks[$k]->type == Net_Gearman_Task::JOB_HIGH_BACKGROUND || $this->set->tasks[$k]->type == Net_Gearman_Task::JOB_LOW_BACKGROUND) { $this->set->tasks[$k]->finished = true; $this->set->tasksCount--; } $t++; } $write = null; $except = null; $read = $this->conn; @socket_select($read, $write, $except, $socket_timeout); foreach ($read as $socket) { $err = socket_last_error($socket); // Error 11 is EAGAIN and is normal in non-blocking mode if ($err && $err != 11) { $msg = socket_strerror($err); socket_getpeername($socket, $remote_address, $remote_port); socket_getsockname($socket, $local_address, $local_port); trigger_error("socket_select failed: ({$err}) {$msg}; server: {$remote_address}:{$remote_port}", E_USER_WARNING); } socket_clear_error($socket); $resp = Net_Gearman_Connection::read($socket); if (count($resp)) { $this->handleResponse($resp, $socket, $this->set); } } } }
/** * Run a set of tasks * * @param object $set A set of tasks to run * * @return void * @see Net_Gearman_Set, Net_Gearman_Task */ public function runSet(Net_Gearman_Set $set) { $totalTasks = $set->tasksCount; $taskKeys = array_keys($set->tasks); $t = 0; while (!$set->finished()) { if ($t < $totalTasks) { $k = $taskKeys[$t]; $this->submitTask($set->tasks[$k]); if ($set->tasks[$k]->type == Net_Gearman_Task::JOB_BACKGROUND) { $set->tasks[$k]->finished = true; $set->tasksCount--; } $t++; } $write = null; $except = null; $read = $this->conn; socket_select($read, $write, $except, 10); foreach ($read as $socket) { $resp = Net_Gearman_Connection::read($socket); if (count($resp)) { $this->handleResponse($resp, $socket, $set); } } } }
/** * Run a set of tasks * * @param object $set A set of tasks to run * @param int $timeout Time in seconds for the socket timeout. Max is 10 seconds * * @return void * @see Net_Gearman_Set, Net_Gearman_Task */ public function runSet(Net_Gearman_Set $set, $timeout = null) { $totalTasks = $set->tasksCount; $taskKeys = array_keys($set->tasks); $t = 0; if ($timeout !== null) { $socket_timeout = min(10, (int) $timeout); } else { $socket_timeout = 10; } while (!$set->finished()) { if ($timeout !== null) { if (empty($start)) { $start = microtime(true); } else { $now = microtime(true); if ($now - $start >= $timeout) { break; } } } if ($t < $totalTasks) { $k = $taskKeys[$t]; $this->submitTask($set->tasks[$k]); if ($set->tasks[$k]->type == Net_Gearman_Task::JOB_BACKGROUND || $set->tasks[$k]->type == Net_Gearman_Task::JOB_HIGH_BACKGROUND || $set->tasks[$k]->type == Net_Gearman_Task::JOB_LOW_BACKGROUND) { $set->tasks[$k]->finished = true; $set->tasksCount--; } $t++; } $write = null; $except = null; $read = $this->conn; socket_select($read, $write, $except, $socket_timeout); foreach ($read as $socket) { $resp = Net_Gearman_Connection::read($socket); if (count($resp)) { $this->handleResponse($resp, $socket, $set); } } } }