Foros del Web » Programando para Internet » PHP »

Multihilo PHP

Estas en el tema de Multihilo PHP en el foro de PHP en Foros del Web. Buenas, Un amigo me comentó la posibilidad de hacer esto en Java "En el codigo le dices: lanza un proceso, que puede ser el escribir ...
  #1 (permalink)  
Antiguo 07/03/2011, 16:32
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Multihilo PHP

Buenas,

Un amigo me comentó la posibilidad de hacer esto en Java

"En el codigo le dices: lanza un proceso, que puede ser el escribir en un fichero número aleatorios y de mientras puedes ir ejecutando el codigo de otro proceso, seria como tener dos programas en el mismo programa"

¿Esto se puede hacer con PHP? es decir puedo tener un sleep(60) en un momento dado de una función y mientras estar ejecutando otra función del script?

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 07/03/2011, 16:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Multihilo PHP

no, de hecho no se posible... ya que php no soporta multi procesos, así que usar un sleep() bloquearía la aplicación globalmente, no por proceso...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 07/03/2011, 17:00
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Multihilo PHP

Que tal neodani,

si bien PHP no tiene Threads, si googleas vas a encontrar varias implementaciones que utilizan el set de funciones pcntl para simular threads, con limitaciones, solo pueden ejecutarse en servidores *nix, se tienen que ejecutar como CLI no por apache directamente.
Dependiendo de lo que necesites se podria buscar alguna solución, que es exactamente lo que quieres hacer ?, ejecutar procesos simultaneos o en background ?

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 07/03/2011, 17:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Multihilo PHP

Cita:
Iniciado por masterpuppet Ver Mensaje
Que tal neodani,

si bien PHP no tiene Threads, si googleas vas a encontrar varias implementaciones que utilizan el set de funciones pcntl para simular threads, con limitaciones, solo pueden ejecutarse en servidores *nix, se tienen que ejecutar como CLI no por apache directamente.
Dependiendo de lo que necesites se podria buscar alguna solución, que es exactamente lo que quieres hacer ?, ejecutar procesos simultaneos o en background ?

Saludos.
El problema que tengo es que tengo que hacer 1000 llamadas a una API x ej. y la API tiene una limitación de 1 petición cada 60 seg. entonces tener un script con un bucle que haga cada una de esas llamadas con un sleep de 60seg. puede ser la muerte. Ya que si haces más de 1 llamada cada 60, la API te devuelve un error de que has superado las peticiones.

Mi colega lo está subsanando usando Java con los multihilos, mientras un hilo va haciendo esas llamadas el resto del programa sigue ejecutandose y hace "otras" funciones del script.

No se si eso te ayuda masterpuppet...

Muchas gracias
  #5 (permalink)  
Antiguo 07/03/2011, 17:20
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Multihilo PHP

Si esas 1000 llamadas están repartidas a intervalos regulares, puedes programar un cronjob para que las ejecute cada cierto tiempo.
  #6 (permalink)  
Antiguo 07/03/2011, 21:08
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 20 años, 4 meses
Puntos: 17
Respuesta: Multihilo PHP

PHP no soporte Therads (Procesos Livianos) pero si soporta Fork (Procesos Duros) eso si, solo en un entorno like unix, recuerda que debes tener activada la extensión pcntl (hoy en día es usual).

La diferencia entre un proceso Fork y un Theards, es que los procesos Trheards comparten memoria, mientras los procesos fork, son una copía exacta (en el punto de forkeo) entre el padre y el hijo (de duplica la cantidad de memoría).

De todas formas, hay varias maneras de comunicar procesos, puedes a través de envío de señales entre procesos, memoría compartida, pipes, sockets,etc.

Te dejo un pequeño articulo sobre "Forkear Procesos en PHP", en mi ejemplo, el script es capaz de funcionar en forma mono-procesos o multi-procesos (forkeando cada proceso hijo), finalmente (como ya sabes) en muchos casos es un poco más optimo utilizar varios procesos versus uno.

Saludos.

Etiquetas: Ninguno
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 06:18.