tengo código que es algo así como esto:Llamar a una función en un subproceso de fondo/proceso (bifurcar)
($i=0; $i < 100; $i++)
{
do ($foo[$i]);
}
Lo anterior es una tarea intensiva de tiempo, y yo tenía la esperanza de ser capaz de crear una función, y llamar dos veces, como a continuación
function wrapper($start;$end)
{
($i=$start; $i < $end; $i++)
{
do ($foo[$i]);
}
}
//have both of these run in parallel
wrapper(0,50);
wrapper(51,100);
miré Gearman pero no puedo usarlo ya que no puedo instalar el servidor gearman (ya que estoy en un servidor compartido). Parece que la forma de lograr esto sería bifurcando. Intenté leer mucho al respecto, pero la documentación y el soporte son escasos. Cualquier código de ayuda/wireframe sería apreciado.
Para definir mi pregunta, ¿cómo podría llamar a wrapper()
pasando los argumentos de manera que se ejecute en un proceso secundario? Además, es importante que pueda registrar una función de devolución de llamada.
Detalles adicionales: PHP 5.3, ejecutándose en el servidor Linux. El script es ejecutado por cgi-fcgi.
Creo que así es como se supone que debo engendrar un proceso secundario, pero ¿cómo puedo usarlo para engendrar múltiples procesos hijo? ¿Y cómo registro una función de devolución de llamada?
$pid = pcntl_fork();
if ($pid == -1) {
// Fork failed
exit(1);
} else if ($pid) {
// The parent process
//should I repeat this same code here to spawn another child process?
} else {
// the child process
//can I call wrapper from here and will it run in this child process?
Gracias. Esto parece una envoltura brillante. Estoy investigando el código en este momento – xbonez
El enlace al que hace referencia también dice que es malo usar un bucle vacío para verificar si los hilos están vivos, porque usará toda su CPU. Deberías incluir un sueño en el ciclo. – Kelvin
@ Kelvin, una mejor solución es implementar una capacidad de 'unirse' a la biblioteca, debería ser bastante simple de hacer. –