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;
    }
}
Example #2
0
function getprops()
{
    return \taskman_getprops();
}
Example #3
0
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);
    }
}