Foros del Web » Programando para Internet » PHP »

llamar varias veces a un mismo proceso

Estas en el tema de llamar varias veces a un mismo proceso en el foro de PHP en Foros del Web. Buenas! Mi problema surge porque estoy diseñando una web y en una de las paginas, llamo a un programa que puede durar hasta 20 minutos ...
  #1 (permalink)  
Antiguo 06/02/2014, 12:29
 
Fecha de Ingreso: febrero-2014
Mensajes: 17
Antigüedad: 5 años, 9 meses
Puntos: 1
Pregunta llamar varias veces a un mismo proceso

Buenas! Mi problema surge porque estoy diseñando una web y en una de las paginas, llamo a un programa que puede durar hasta 20 minutos depende las variables que se le pasen, mientras esta ejecutandose no puedo abrir otra pestaña y lanzar otra vez ese proceso pero con variables distintas, tengo o que esperar a que termine o abrir la web con otro navegador, estoy probando con pcntl_fork(); y no hay manera, y ya no se por donde meterle mano. Alguna idea? Con el fork simplemente hago algo asi:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

</head>

<body>
<?php

$father_pid = getmypid();
$pid = pcntl_fork();
if ($pid == -1)
{
        die('could not fork');
}
else if ($pid)
{
        print "I'm the Father mi PID is ".$father_pid." and my children is ".$pid."\n";
	exec("path-to-program");
        //pcntl_wait($status); //Protect against Zombie children
}
else
{
        print "I'm the Children, my PID is ".getmypid()." and the PID of my Father is ".$father_pid."\n";
	exec("path-to-program");
}

?>
</body>
</html>
Si ejecuto eso en 2 pestañas distintas con el mismo navegador, el resultado es el mismo PID para los dos....

Ideas? Sugerencias? algo que estoy haciendo mal... Cualquier cosa será bienvenida.

Saludos y gracias!
  #2 (permalink)  
Antiguo 09/02/2014, 13:52
 
Fecha de Ingreso: febrero-2014
Mensajes: 17
Antigüedad: 5 años, 9 meses
Puntos: 1
Respuesta: llamar varias veces a un mismo proceso

Alguien que pueda echarme una mano?

Gracias!
  #3 (permalink)  
Antiguo 09/02/2014, 21:16
 
Fecha de Ingreso: febrero-2011
Mensajes: 15
Antigüedad: 8 años, 9 meses
Puntos: 2
Respuesta: llamar varias veces a un mismo proceso

http://www.php.net/manual/es/book.session.php
  #4 (permalink)  
Antiguo 09/02/2014, 21:32
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 13 años, 9 meses
Puntos: 96
Respuesta: llamar varias veces a un mismo proceso

Buenas Noches.

Ese tipo de procesos por que no lo ejecutas en background con alguna tarea programada o cron?
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #5 (permalink)  
Antiguo 10/02/2014, 05:35
 
Fecha de Ingreso: febrero-2014
Mensajes: 17
Antigüedad: 5 años, 9 meses
Puntos: 1
Respuesta: llamar varias veces a un mismo proceso

Cita:
Iniciado por Nano_ Ver Mensaje
Buenas Noches.

Ese tipo de procesos por que no lo ejecutas en background con alguna tarea programada o cron?
Porque es un programa que se ejecuta cada vez que un usuario lo solicita, es decir, en la web se introducen previamente unos parametros y luego el usuario ejecuta el programa, el problema viene cuando el usuario pulsa run, si abre otra pestaña para ejecutar lo mismo pero con distintos parámetros, ésta no funciona hasta que el run (proceso) que esta(ba) ejecutandose no termina.

No se si me he explicado muy bien....
  #6 (permalink)  
Antiguo 11/02/2014, 17:47
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 2 meses
Puntos: 214
Respuesta: llamar varias veces a un mismo proceso

<saludo>
Uhm, pregunto algo, cual es el resultado esperado por el usuario?
Un archivo? Un correo? Una notificación en pantalla?

Creo que lo que podrías hacer es que la página se convierta
en "solicitadora" más no "ejecutadora" de las tareas que se te demoran
n tiempo

Es decir, que cuando la persona entre a la página,
inserte la solicitud en una tabla para tal fin, y no haga más en ese momento
a través de la página.

Por otra parte, deberías crear una tarea programada en el server (a su vez llamando a un php) que consulte cuales solicitudes se han realizado,
y que las empiece a ejecutar, tomando todo el tiempo que sea necesario.

Finalmente, avisar de algún modo al usuario (Ya sea por email, o por la misma página pero en una sección de "solicitudes resueltas", u otro medio)

Te dejo la duda, nos comentas entonces.
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 17/02/2014, 09:42
 
Fecha de Ingreso: febrero-2014
Mensajes: 17
Antigüedad: 5 años, 9 meses
Puntos: 1
Respuesta: llamar varias veces a un mismo proceso

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>
Uhm, pregunto algo, cual es el resultado esperado por el usuario?
Un archivo? Un correo? Una notificación en pantalla?

Creo que lo que podrías hacer es que la página se convierta
en "solicitadora" más no "ejecutadora" de las tareas que se te demoran
n tiempo

Es decir, que cuando la persona entre a la página,
inserte la solicitud en una tabla para tal fin, y no haga más en ese momento
a través de la página.

Por otra parte, deberías crear una tarea programada en el server (a su vez llamando a un php) que consulte cuales solicitudes se han realizado,
y que las empiece a ejecutar, tomando todo el tiempo que sea necesario.

Finalmente, avisar de algún modo al usuario (Ya sea por email, o por la misma página pero en una sección de "solicitudes resueltas", u otro medio)

Te dejo la duda, nos comentas entonces.
</saludo>
Lo que muestra es un resultado por pantalla, hay un tiempo maximo de 1h, si los inputs que pone el user, exceden de una hora se muestra un aviso al usuario de que cambie los parametros para que el tiempo no exceda de una hora y se ejecute su peticion.

Como podria hacer para que la pagina sea la solicitadora...???

Saludos!
  #8 (permalink)  
Antiguo 18/02/2014, 15:30
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 2 meses
Puntos: 214
Respuesta: llamar varias veces a un mismo proceso

<saludo>
Una hora!! En web!!! Sacrilegio!!! juasssssssss
en serio, es demasiado tiempo.

Ahora, lo que te decía que se convierta
en solicitadora la página es por ej que

1. El formulario que ya imagino estas usando,
cuando hacen el submit eso va a un php
donde se procesa y se quedo esperando la hora.

Propongo cambiar esto, para que cuando vaya al
submit, no ejecute de una vez la labor,
sino que vaya guardando cada solicitud
de generación en una tabla (base de datos) o en
un archivo plano (txt, similares)

Esto pasaría entonces de ser un proceso que espera
una hora, a que espere por máximo un minuto o dos.

Si ves, hasta ahora NO se ha ejecutado el proceso
que actualmente se te demora una hora.

Ahora bien, el siguiente paso es crear otro php,
pero que NO corra por la página, sino que sea una
tarea programada o cron job en el server,
y que se encargue de:

1. Leer las solicitudes
(si eliges bd, que consulte la tabla, si eliges txt que lea el archivo)
2. Ejecutar una a una las solicitudes, teorizando que varios usuarios
hagan uso de la herramienta
3. Ir guardando el resultado en una variable o en un archivo plano
o en la bd
4. A medida que vaya terminando, informe via email al usuario,
o en la página en una sección de "solicitudes resueltas"
que lo que pidío hace una hora ya fue ejecutado.
5. Ir "marcando" de algún modo las solicitudes que ya fueron hechas,
para que la próxima vez que la tarea programada se ejecute (puedes programarla por ej cada dos horas)
pues no vuelva a realizar las que ya hizo más las nuevas,
sino que se enfoque solo en las nuevas

Como ves, esto aceleraría el proceso en página para la solicitud,
mejoraría el procesamiento pues al ser una tarea programada
no ocuparia el navegador web y por esto no tendría tanta demora
en el tiempo de respuesta, y finalmente puedes optimizar
el proceso incluso mucho más de lo que yo te estoy proponiendo

Así que, lee esto y nos cuentas que has decidido

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 18/02/2014, 15:51
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: llamar varias veces a un mismo proceso

Cierra la sesión antes de comenzar la tarea que consume tanto tiempo.
  #10 (permalink)  
Antiguo 20/02/2014, 04:35
 
Fecha de Ingreso: febrero-2014
Mensajes: 17
Antigüedad: 5 años, 9 meses
Puntos: 1
Respuesta: llamar varias veces a un mismo proceso

Cita:
Iniciado por piwy Ver Mensaje
Cierra la sesión antes de comenzar la tarea que consume tanto tiempo.
Con sesion destroy?? Sesion unset??
Te refieres a eso???

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>
Una hora!! En web!!! Sacrilegio!!! juasssssssss
en serio, es demasiado tiempo.

Ahora, lo que te decía que se convierta
en solicitadora la página es por ej que

1. El formulario que ya imagino estas usando,
cuando hacen el submit eso va a un php
donde se procesa y se quedo esperando la hora.

Propongo cambiar esto, para que cuando vaya al
submit, no ejecute de una vez la labor,
sino que vaya guardando cada solicitud
de generación en una tabla (base de datos) o en
un archivo plano (txt, similares)

Esto pasaría entonces de ser un proceso que espera
una hora, a que espere por máximo un minuto o dos.

Si ves, hasta ahora NO se ha ejecutado el proceso
que actualmente se te demora una hora.

Ahora bien, el siguiente paso es crear otro php,
pero que NO corra por la página, sino que sea una
tarea programada o cron job en el server,
y que se encargue de:

1. Leer las solicitudes
(si eliges bd, que consulte la tabla, si eliges txt que lea el archivo)
2. Ejecutar una a una las solicitudes, teorizando que varios usuarios
hagan uso de la herramienta
3. Ir guardando el resultado en una variable o en un archivo plano
o en la bd
4. A medida que vaya terminando, informe via email al usuario,
o en la página en una sección de "solicitudes resueltas"
que lo que pidío hace una hora ya fue ejecutado.
5. Ir "marcando" de algún modo las solicitudes que ya fueron hechas,
para que la próxima vez que la tarea programada se ejecute (puedes programarla por ej cada dos horas)
pues no vuelva a realizar las que ya hizo más las nuevas,
sino que se enfoque solo en las nuevas

Como ves, esto aceleraría el proceso en página para la solicitud,
mejoraría el procesamiento pues al ser una tarea programada
no ocuparia el navegador web y por esto no tendría tanta demora
en el tiempo de respuesta, y finalmente puedes optimizar
el proceso incluso mucho más de lo que yo te estoy proponiendo

Así que, lee esto y nos cuentas que has decidido

</saludo>
Se que es mucho tiempo, pero soy un "mandao", es lo que quieres, he tenido que limitar muchas cosas mas a base de insistir, porque pretendian hacer autenticas burradas.

Lo que me comentas estaria muy bien, pero de la manera que esta ahora mismo enfocado seria casi imposible, ya que no hay logueos y seria dificil saber quien hizo la solicitud, pero he pensado que si por ejemplo tarda 30 min o mas, se requiera un mail y se guarde todo en un archivo que luego se ejecute como tu me has comentado y una vez terminado, se mande el resultado al mail.
Y el server es de un tercero por lo que para acceder deberia pedirle acceso y no se si le estaria dispuesto a hacerlo o no....

De todas formas eso serian mejoras a hacer mas adelante ya que quieren tenerlo para esta semana funcionando todo

Muchas gracias por las sugerencias y espero hacerlo en un futuro para aprender y hacer una web mas funcional, ya iré comentando si me surge alguna duda de como implementarlo.

Saludos y mil gracias!
  #11 (permalink)  
Antiguo 20/02/2014, 14:45
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 10 años, 2 meses
Puntos: 214
Respuesta: llamar varias veces a un mismo proceso

<saludos>
Hola, bueno, si que estás en un mandao!!
Juasss

Ahora bien, si, yo daba por seguro que estaban
manejando usuarios y eso pero veo que,
es algo que se hace entonces por demanda
en un formulario a medida que x o y persona necesite

Ok, en ese caso, y para que no tengas por ahora que
explayarte realizando logueos, etc (pues corre el tiempo en contra)

Lo que si puedes hacer es generar identificadores aleatorios
cada vez que una persona solicite algo

A su vez, teniendo esto, pues que soliciten lo que necesitan
y cuando lo hagan, tu ya bien generes el txt o mejor aún
insertes en bd la solicitud (le puedes pedir el mail para fines
de notificación, o generar un link adicional en página donde
se vean todas las solicitudes, pues no van a tener modo
de ser filtradas por usuarios, pero si podrías generar un filtro
de fechas por lo menos, y las organizas por la más reciente (esto claro, si vas a usar bd)

Digamos que podría ser una optimización muy a la carrera,
pero igualmente efectiva por ahora.
Y pues obviamente, con la tarea programada de por medio.

Sin embargo si lo ves muy lioso, pues nada, corre ahora y
luego generas la versión 2.0 con todas las mejoras que se te ocurran.

</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #12 (permalink)  
Antiguo 20/02/2014, 15:07
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 11 años, 6 meses
Puntos: 528
Respuesta: llamar varias veces a un mismo proceso

Para poder ejecutar un mismo proceso en diferentes ventanas haz como te dijo piwi, cierra la sesión, pero con

session_write_close();

Etiquetas: html, proceso, variable, veces
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 16:28.