function taskman_runtasks_parall($tasks, $args = array()) { global $TASKMAN_SCRIPT; $cmds = array(); foreach ($tasks as $task) { $cmd = 'php ' . $TASKMAN_SCRIPT . ' ' . $task . ' ' . implode(' ', $args) . ''; foreach (taskman_getprops() as $key => $value) { $cmd .= ' -D ' . $key . '=' . $value; } $cmds[] = $cmd; } taskman_sysmsg("************************ Running parallel tasks: " . implode(',', $tasks) . " ************************\n"); $procs = array(); $cnt = 0; foreach ($cmds as $cmd) { $descriptorspec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/tmp/taskman.parall.err" . $cnt++, "a")); $cwd = getcwd(); $env = array(); $proc = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env); $procs[] = array($proc, $pipes); } $timeout = 0; while (sizeof($procs) > 0) { $start = microtime(true); //every 5 seconds... if ($timeout > 5) { taskman_sysmsg("Still running tasks: " . sizeof($procs) . "\n"); $timeout = 0; } $deads = array(); foreach ($procs as $id => $item) { if (is_resource($item[0])) { $status = proc_get_status($item[0]); if ($status['running'] == false) { $deads[] = $id; taskman_sysmsg("Task '{$status['command']}'({$id}) completed with status: " . $status['exitcode'] . "\n"); if ($status['exitcode'] != 0) { throw new TaskmanException("Task '{$status['command']}' execution error"); } } } } foreach ($deads as $id) { unset($procs[$id]); } usleep(1000); $timeout += microtime(true) - $start; } }
function getprops() { return \taskman_getprops(); }
function taskman_runtasks($tasks, $args = array(), $isolate = false) { global $TASKMAN_SCRIPT; if (!$isolate) { foreach ($tasks as $task_spec) { if (is_array($task_spec)) { taskman_runtask($task_spec[0], $task_spec[1]); } else { taskman_runtask($task_spec, $args); } } } else { $cmd = 'php ' . $TASKMAN_SCRIPT . ' ' . implode(',', $tasks) . ' ' . implode(' ', $args) . ''; foreach (taskman_getprops() as $key => $value) { $cmd .= ' -D ' . $key . '=' . escapeshellarg($value); } taskman_shell_ensure($cmd); } }