Foros del Web » Programando para Internet » PHP »

Pregunta sobre la función sleep()

Estas en el tema de Pregunta sobre la función sleep() en el foro de PHP en Foros del Web. Hola amigos, tengo una pregunta. Si estoy haciendo una consulta y en el bucle le pongo que se detenga 10 segundos y este bucle se ...
  #1 (permalink)  
Antiguo 20/03/2010, 13:16
Avatar de pepejaguar  
Fecha de Ingreso: enero-2005
Ubicación: Guatemala
Mensajes: 76
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Pregunta sobre la función sleep()

Hola amigos, tengo una pregunta.

Si estoy haciendo una consulta y en el bucle le pongo que se detenga 10 segundos y este bucle se repite 30 veces, el script se tardará 300 segundos.

Si el tiempo de ejecución de php está puesto en 60 segundos, ¿este script se va a completar, o la función sleep(), inicia el contador de nuevo cada diez segundos?

No tengo muy claro si esto lo puedo lograr con sleep() o si hay otra función, todo esto con el fin de no sobre cargar el servidor.

Gracias por la ayuda.

Saludos.
  #2 (permalink)  
Antiguo 20/03/2010, 16:24
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Pregunta sobre la función sleep()

el script se interrumpe, lo que debes hacer es usar set_time_limit para darle mayor tiempo de ejecución al script
  #3 (permalink)  
Antiguo 20/03/2010, 20:35
Avatar de pepejaguar  
Fecha de Ingreso: enero-2005
Ubicación: Guatemala
Mensajes: 76
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Respuesta: Pregunta sobre la función sleep()

Cita:
Iniciado por maycolalvarez Ver Mensaje
el script se interrumpe, lo que debes hacer es usar set_time_limit para darle mayor tiempo de ejecución al script
Ya he probado el "set_time_limit", pero creo que se sufre el riesgo de que se sobre cargue el servidor y se provoque su caída.

Ahora son 300 segundos, pero que tal si en algún momento necesitara 1500 segundos por ejemplo.

¿Hay alguna forma en la que puedas suspender la ejecución del script, cada "ciertas veces" y que después de un tiempo cualquiera, reinicie donde se quedó?

Algo similar a como trabajan los e-mails masivos, aunque aclaro que no es para esto, sino para sincronizar dos tablas con una tercera, que obtiene los datos de las primeras dos.

Saludos.
  #4 (permalink)  
Antiguo 20/03/2010, 20:54
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Pregunta sobre la función sleep()

Existen las funciones exit o die. Tendrías que crear algún código que verifique un tiempo y cuando llegue al limite del tiempo ejecute estas funciones. También existe una función llamada register_shutdown_function, aunque no sé si te será de utilidad en tu caso, pero échale un ojo a ver si te pueda ayudar en algo. Ahora tendrías que crear algún código también con sesiones para que indique donde fue que se quedo y de ahí continuar. En este tipo de casos si te serviría lo de register_shutdown_function.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 21/03/2010, 01:12
Avatar de pepejaguar  
Fecha de Ingreso: enero-2005
Ubicación: Guatemala
Mensajes: 76
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Respuesta: Pregunta sobre la función sleep()

Aquí un ejemplo de lo que tengo pensado, aunque no creo que sea una solución muy fina y seguro hay una forma mejor, pero es para tomar la idea.

Código PHP:
$origenes mysql_query("SELECT id,titulo FROM datos");
while (
$origen mysql_fetch_array($origenes)) {

echo 
$origen['titulo']."<br />";

if(
fmod($origen['id'], 1000) == 0) { sleep(5); } 

Nota: las consultas son mas complejas e incluye consultas combinadas y condicionales, pero para lo que quiero hacer, esto lo ejemplifica bien.

El echo $origen['titulo']."<br />"; es para simbolizar las operaciones que se realizan.

La clave está en if(fmod($origen['id'], 1000) == 0) { sleep(5); }

Básicamente lo que hace es que cuando el id es múltiplo de 1000, se detenga 5 segundos y luego continúa.

Lo he probado en localhost y funciona bien, con una prueba de 7000 registros, pero me parece que la solución es algo tosca y aún no me convence.

En este caso, el script se detiene 7 veces, sumando 35 segundos de parada, mas lo que tarda en ejecutar las consultas, ¿es correcto?, al detenerlo con sleep() ¿se reinicia el tiempo de ejecución o se continúa sumando el tiempo que ya llevaba?.

Última edición por pepejaguar; 21/03/2010 a las 09:31

Etiquetas: sleep
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:01.