Foros del Web » Programando para Internet » PHP »

Bloqueo temporal de proceso

Estas en el tema de Bloqueo temporal de proceso en el foro de PHP en Foros del Web. Hola Amig@s, Tengo una inquietud que me inquieta acerca de un proceso. Me explico: Existe una aplicación que realiza la liquidación de nomina. Este proceso ...
  #1 (permalink)  
Antiguo 26/07/2012, 10:13
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Pregunta Bloqueo temporal de proceso

Hola Amig@s,

Tengo una inquietud que me inquieta acerca de un proceso. Me explico: Existe una aplicación que realiza la liquidación de nomina. Este proceso la realizan diferentes usuarios simultáneamente. El caso es que se quiere que mientras se esté realizando un proceso de estos los otros deben esperar a que termine el que está activo ya que cada proceso de estos realiza la actualización de varias tablas y genera varios comprobantes que deben ser consecutivos para cada proceso, es decir, cada proceso me genera más de un comprobante.

Entonces he pensado en crear algo así como una cola de procesos para que cuando haya finalizado el proceso de un usuario continúe con el siguiente y así garantizar que los comprobantes generados por cada uno de ellos sean consecutivos.

Alguien me puede dar una luz de cómo puedo hacer esto desde PHP?

Agradezco de antemano sus comentarios y ayudas
__________________
El que no sabe y sabe que no sabe, es un ignorante...enseñémosle!. El que no sabe y se cree que sabe, es un necio... ¡ignorémosle!.
El que sabe y sabe que sabe, es un sabio... ¡sigámosle!.
  #2 (permalink)  
Antiguo 26/07/2012, 11:36
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Bloqueo temporal de proceso

Hola, despues de leer tu problema creo que eso no es posible hacerlo por php. Creo que lo mejor que puedes hacer es gestionarlo a partir de transacciones usando mysql. Igual se puede habilitar desde php. SI no sabes muy bien que son las transacciones te coloco un enlace que da una pequeña explicación.

http://yophpro.com/mysql/transaccion...l-con-php.html

Se me ocurre otra pero por el momento te dejo la inquietud a ver si de pronto por ahi podrias gestionar lo que necesitas.
__________________
Blog de humor http://elcuasatar.net63.net/
  #3 (permalink)  
Antiguo 26/07/2012, 12:12
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Bloqueo temporal de proceso

augusto y si usas una tabla que guarde los procesos que se estan ejecutando? sería una opción para no enredarte mas
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!
  #4 (permalink)  
Antiguo 26/07/2012, 14:22
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 2 meses
Puntos: 155
Respuesta: Bloqueo temporal de proceso

Cita:
Iniciado por p414 Ver Mensaje
augusto y si usas una tabla que guarde los procesos que se estan ejecutando? sería una opción para no enredarte mas
de acuerdo totalmente
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #5 (permalink)  
Antiguo 26/07/2012, 14:25
 
Fecha de Ingreso: junio-2004
Ubicación: Ciudad de Panama
Mensajes: 551
Antigüedad: 19 años, 10 meses
Puntos: 8
Respuesta: Bloqueo temporal de proceso

Gracias por sus respuestas p414 y cuasatar

p414: Esa es una opción que estoy considerando. Creo que seria por el lado de crear una tabla temporal utilizando CREATE TEMP TABLE de la siguiente manera: Entra el primer proceso, este crearía la tabla temporal. Al entrar el segundo proceso se consultaría si existe la tabla temporal; de este modo si existe la tabla temporal quedaría patinando en un ciclo while mientras exista la tabla. Cuando ya no exista la tabla temporal sale del while y continua el proceso.

No lo hago con una tabla normal ya que si dentro del proceso ocurre alguna excepción como algún error en un query o al hacer un insert, esto haría que ocurriese un rollback pero la tabla seguiría existiendo y el segundo proceso quedaría patinando en el while.

Ahora, de hacerlo así no he podido saber como consulto si la TEMP TABLE ha sido creado por un proceso anterior (Esto en PostgreSQL que es el motor que se utiliza... ya hare consulta pertinente en el foro de PostgreSQL)

cuasatar: Sí tengo conocimiento sobre transaccionalidad (BEGIN y COMMIT) pero esto no evitaría que el segundo proceso entre a operar simultáneamente con el el primero y por ende se perdería el concepto de generar los comprobantes en orden estrictamente consecutivo por proceso. Me explico con un ejemplo: con el primer proceso se generarían 5 comprobantes y con el segundo proceso se generarían 12 comprobantes. Se espera que los comprobantes generados en el primer proceso sean del 1 al 5 y con el segundo proceso se generen los comprobantes del 6 al 17. Utilizando BEGIN + COMMIT está el riesgo de que los comprobantes del primer proceso terminando sin excepciones fueran 1,2,7,9 y 10, mientras que los comprobantes del segundo proceso serian 3,4,5,6,8,11,etc. Ahora, queda la opción de utilizar bloqueos sobre las tablas involucradas (ACCESS EXCLUSIVE MODE por ejemplo), pero esto realiza el bloqueo por fila o por tabla y el caso mio es que son bastantes las tablas involucradas en el proceso, en fin, creo que esto ya se volvería tema para el foro de PostrgreSQL. Solo quería saber si mediante PHP pudiese programarse alguna forma de detener el proceso mientras haya alguno previamente establecido..... (?)
__________________
El que no sabe y sabe que no sabe, es un ignorante...enseñémosle!. El que no sabe y se cree que sabe, es un necio... ¡ignorémosle!.
El que sabe y sabe que sabe, es un sabio... ¡sigámosle!.

Etiquetas: bloqueo, proceso, tabla, temporal, usuarios
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 15:03.