¿Cómo puedo generar procesos concurrentes con PHP?
Pregunta
Estoy tratando de procesos múltiples de regeneración a la vez en PHP con proc_open, pero la segunda llamada no se iniciará hasta que el primer proceso ha terminado. Aquí está el código que estoy usando:
for ($i = 0; $i < 2; $i++)
{
$cmdline = "sleep 5";
print $cmdline . "\n";
$descriptors = array(0 => array('file', '/dev/null', 'r'),
1 => array('file', '/dev/null', 'w'),
2 => array('file', '/dev/null', 'w'));
$proc = proc_open($cmdline, $descriptors, $pipes);
print "opened\n";
}
Solución
Otros están señalando alternativas, pero el problema real es probable que la filtración de la variable $ proc. Creo que PHP tiene que realizar un seguimiento de esto y si está sobreescribiendo ella, a limpiar para que (lo que significa proc_close, lo que significa esperar ...)
Trate de no filtrar el valor de $ proc:
<?php
$procs = array();
for ($i = 0; $i < 2; $i++)
{
$cmdline = "sleep 5";
print $cmdline . "\n";
$descriptors = array(0 => array('file', '/dev/null', 'r'),
1 => array('file', '/dev/null', 'w'),
2 => array('file', '/dev/null', 'w'));
$procs[]= proc_open($cmdline, $descriptors, $pipes);
print "opened\n";
}
?>
Nota: : Esto todavía va a limpiar sus manijas del proceso antes de salir, por lo que todos los procesos tendrán que completar primero. Debe utilizar proc_close
después de haber terminado haciendo lo que tiene que ver con estos (por ejemplo: tubos de leer, etc.). Si lo que realmente quiere es poner en marcha ellos y olvidarse de ellos, que es una solución diferente.
Otros consejos
Aquí hay un pequeño gran artículo sobre la creación de hilos. Incluye una clase y cómo usarlo. http://www.alternateinterior.com/2007/ 05 / multi-threading-estrategias-en-php.html
Esto debe conseguir que va en la dirección correcta.
Creo que de manera "proc_open" está diseñado para el trabajo (en realidad el sistema). Es necesario especificar que desea desconectar y con o que realmente ejecuta un script que se ejecutará el subprograma y el regreso a ti.
Prueba esto:
$cmdline = "sleep 5 &";