Multi-threading PHP / SSH2

1

Eu basicamente termino de usar o SSH2 com PHP. Alguns podem já que, enquanto usá-lo, o código PHP realmente espera que todos os comandos listados sejam executados no SSH e, quando tudo estiver pronto, devolve os resultados. Onde isso é bom para o trabalho que estou fazendo, mas eu preciso de alguns comandos para ser multi-threaded.

$ cmd = MyCommand; echo $ ssh- > exec ($ cmd);

Então, só quero que isso seja executado em paralelo duas vezes. Eu pesquisei algumas coisas, mas não me dei bem com isso. Para uma coisa básica, me deparei com este post postado por alguém, mas não deu certo para mim.

for ($i = 0; $i < 2; $i += 1)
    {
        exec("php test_1.php $i > test.txt &");  
    //this will execute test_1.php and will leave this process executing in the background and will go to next iteration of the loop immediately without waiting the completion of the script in the test_1.php , $i  is passed as argument .
}

Eu tentei colocar dessa forma exec ("echo $ ssh- > exec ($ cmd) $ i > test.txt &"); no loop, mas ele nunca entrou no loop ou o echo $ ssh- > exec falhou. Eu realmente não preciso de um multi-threading muito legal. Até mesmo um segundo atraso faria bem, obrigado.

    
por Asad Moeen 10.07.2012 / 12:13

2 respostas

1

... além do fato de que a execução de comandos do sistema tem pouco a ver com o PHP, sim, a execução de um comando do sistema sem qualquer preparação adicional fará com que o chamador espere o término do comando.

Tradicionalmente, um usa fork () para esse tipo de coisa.

    
por 10.07.2012 / 12:21
0

Eu achei isso postado por outro usuário no ServerFault mas isso basicamente não funciona como multi-threading. Meu comando exec $ cmd3 basicamente fecha automaticamente após 10 segundos e esses comandos são executados por 30 segundos e não são simultâneos de qualquer maneira.

$i=0;
while($i < 3)
{
$pid = pcntl_fork();

if($pid == -1)
{
    echo "Couldn't fork process";
    exit(1);
}
else
{
    if($pid)
    {
        pcntl_wait($status); 
    }
    else
    {

        echo $ssh->exec($cmd3);

    }
}
$i++;
}
    
por 10.07.2012 / 17:39