síndrome - Retraso de sueño PHP
sueño temprano (5)
En PHP, quiero poner un segundo retraso en cada iteración del ciclo.
for ($i=0; $i <= 10; $i++) {
$file_exists=file_exists($location.$filename);
if($file_exists) {
break;
}
//sleep for 3 seconds
}
¿Cómo puedo hacer esto?
¿Ha considerado usar un script de PHP Daemon usando el supervisorD ? Lo uso en múltiples tareas que deben ejecutarse todo el tiempo.
El truco es asegurarse de que cada vez que ejecuta su secuencia de comandos compruebe si hay recursos de memoria. Si es demasiado alto, detenga el proceso y luego permita que se reinicie nuevamente.
He utilizado con éxito este proceso para verificar siempre los registros de la base de datos para que las tareas se procesen.
Puede ser exagerado, pero vale la pena considerarlo.
Las liebres son dos formas de ejecutar el script php durante un período de tiempo. Cuando tenga su código y quiera pausar el funcionamiento de la secuencia de comandos por un tiempo, use estas funciones. En estos ejemplos , la primera parte del código se realizará en secuencia de comandos y la segunda parte del código se realizará pero con retraso.
- Usando http://php.net/manual/en/function.sleep.php función http://php.net/manual/en/function.sleep.php puede definir el tiempo de suspensión en segundos.
Ejemplo:
echo "Message 1";
// The first part of code.
$timeInSeconds = 3;
sleep($timeInSeconds);
// The second part of code.
echo "Message 2";
De esta forma, es posible mantener el script php durante 3 segundos. Usando esta función puede dormir el script para el número entero (entero) de segundos.
- Usando la función usleep() puede definir el tiempo de suspensión en microsegundos. Este tiempo de suspensión es conveniente para intervalos que requieren un tiempo más preciso que un segundo.
Ejemplo:
echo "Message 1";
// The first part of code.
$timeInMicroSeconds = 2487147;
usleep($timeInMicroSeconds);
// The second part of code.
echo "Message 2";
Puede utilizar esta función si desea dormir php para valores de tiempo menores que el segundo (flotante). En este ejemplo, he puesto script para dormir durante 2.487147 segundos.
Puede usar sleep(3)
que duerme el hilo durante 3 segundos.
El método de corrección de sueño en http://php.net/manual/en/function.sleep.php .
Use la función PHP sleep()
. http://php.net/manual/en/function.sleep.php Esto detiene la ejecución del siguiente ciclo por el número de segundos dado. Entonces algo como esto
for ($i=0; $i <= 10; $i++) {
$file_exists=file_exists($location.$filename);
if($file_exists) {
break;
}
sleep(3); // this should halt for 3 seconds for every loop
}
Veo lo que está haciendo ... retrasando un script para comprobar constantemente si hay un archivo en el sistema de archivos (uno que está siendo cargado o escrito por otro script, supongo). Esta es una MALA manera de hacerlo.
- Tu script se ejecutará lentamente. Ahogando el servidor si varios usuarios están ejecutando ese script.
- Su servidor puede agotar el tiempo de espera para algunos usuarios.
- El acceso a HDD es un recurso costoso.
- Hay mejores formas de hacer esto.
Podrías usar Ajax. Y use un tiempo de espera para llamar a su script PHP cada pocos segundos. Esto evitará la lenta carga de scripts. Y también puede seguir haciéndolo constantemente (el ciclo actual for solo funcionará durante 33 segundos y luego se detendrá).
Puedes usar una base de datos. En algunos casos, el acceso a la base de datos es más rápido que el acceso a HDD. Especialmente con vistas y almacenamiento en caché. El script que crea el archivo / cargando el archivo puede establecer un indicador en una tabla (es decir, file_exists) y luego puede tener un script que verifique ese campo en su base de datos.