2008-11-25 19 views
7

Estoy escribiendo una aplicación simple en PHP que necesita ocasionalmente llevar a cabo un conjunto bastante intensivo de actualizaciones de MySQL. En particular, no quiero que esto cause un retraso para el usuario, por lo que me pregunto sobre el uso de pcntl_fork().¿Es una buena idea hornear procesos en PHP/Apache?

No estoy seguro de cómo funciona realmente esto: ¿continuará ejecutándose el proceso secundario después de que finalice el proceso principal? ¿Terminará el proceso padre y la carga de la página del usuario estará completa antes de que el proceso hijo se complete?

En otras palabras, ¿es esta una manera segura de tener un script PHP (ejecutando bajo Apache) hacer algunas actualizaciones que consumen mucho tiempo sin demorar al usuario, o debería simplemente pedirle a mis usuarios que se demoren?

+0

Por favor, deje en claro en el título de la pregunta que quiere decir horquillas un proceso. Primero pensé que querías bifurcar el proyecto. –

+0

De acuerdo con phjr. ¿Alguien puede editar el título? – OIS

Respuesta

3

El proceso principal finalizará, la página del usuario se cargará completamente, el proceso secundario continuará y el uso no tendrá ningún comentario acerca de si el proceso hijo finalizó o no con éxito.

1

Alguien por ahí puede probablemente decirle en detalle qué sucede cuando lo llama bajo apache, pero es probable que obtenga respuestas que no siempre son ciertas dependiendo de qué versiones y combinaciones de apache y php esté usando. Deberías usar ajax y tener dos solicitudes. Responda una vez con la página que dice lo que está haciendo y luego con una encuesta de llamada ajax una segunda solicitud para el estado y donde realmente hace el trabajo.

0

Si PHP se ejecuta bajo Apache ya que mod_php forking de módulo no funcionará en absoluto, recibirá una advertencia diciendo que la función * pcntl_fork() * no está definida. En ese caso, una buena solución es usar exec() en su lugar para ejecutar un trabajo de php separado usando la línea de comando.

0

Creo que es una mala idea. He hecho cosas similares, y apache redirige la salida del padre a su hijo. Es su navegador muestra la información de uno de los procesos secundarios.
Haga clic en this para obtener más información
Espero que lo ayude.

Cuestiones relacionadas