Pregunta

Tengo un script php que busca actualizaciones en muchos (miles) de sitios. En ocasiones (con más frecuencia a medida que aumenta el número de sitios), tengo un tiempo de espera de ejecución en la actualización de uno de estos sitios, y todo el script se descompone.

La mejor idea que se me ocurre es crear una bifurcación de cada actualización, por lo que, si se agota, la actualización general simplemente continúa. Por lo que he recopilado, parece que los subprocesos de PHP no son algo en que confiar, especialmente en una plataforma de Windows (en la que desafortunadamente tengo que trabajar).

Pensé en usar el enrollamiento como un mecanismo de bifurcación, pero ¿no será mucho más costoso para el servidor (en tiempo y capacidad de procesamiento)?

Me encantaría escuchar algunas ideas y experiencias sobre el forking / threading de PHP ...

gracias, Omer.

¿Fue útil?

Solución 5

Bueno, al final me fui para curl, y funciona bien.

Necesitaba una solución multiplataforma, ya que me desarrollo en una Mac, en este caso el seridor de producción es Windows. Eso significaba que pcntl estaba fuera de discusión.

Me preocupaba que el envío de miles de solicitudes de enrollamiento a mi propio servidor pudiera acosarlo y molestar a los usuarios en el sitio en ese momento, pero estaba equivocado.

Sin embargo, tuve que agregar un set_time_limit (0) a la secuencia de comandos que inicia todas las llamadas de rizo, de lo contrario, simplemente se apaga.

Otros consejos

Si va a utilizar cURL, observe la familia de métodos multi * que le permite racionalizar cURL e interactuar con un conjunto de sitios. Dicho esto, también puede establecer su tiempo máximo de ejecución (a través de ini_set) en un número arbitrariamente alto y / o mantener su propio contador de vigilancia para que nunca deje que sea demasiado alto.

Pero sí, en última instancia, se van a encontrar problemas y la falta de soporte completo de subprocesos en PHP. Entonces, lo mejor que puedes hacer es buscar otras alternativas, por ejemplo, otros lenguajes / plataformas que proporcionan soporte de subprocesos nativo.

Logré obtener algún tipo de subprocesamiento en php usando la extensión pcntl. No fue la mejor solución, pero funcionó.

http://www.php.net/manual/en/ref .pcntl.php

intente los siguientes enlaces también, me dieron una idea de cómo llevar a cabo la implementación.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process- bifurcación /

Espero que esto ayude, pero php no es muy bueno con el subprocesamiento sin embargo.

Puede establecer la directiva ini < código> max_execution_time a 0. Esto debería eliminar el tiempo máximo de ejecución y permitir que el script se ejecute sin incurrir en este error. Este valor debe establecerse en su archivo php.ini, sin embargo, el uso de ini_set no funciona.

set_time_limit(0);

set_time_limit docs

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top