2011-02-02 15 views
6

¿Hay alguna manera de hacer que pcntl_fork funcione en WAMP? Necesito desarrollar una solución de bifurcación y probarla localmente.WAMP y pcntl_fork

+1

Se podría tratar de correr/traducirlo bajo Cygwin, donde es más probable que funcione PCNTL. De lo contrario, podría diseñar algo a través de la extensión w32api si se atreve (y si todavía está disponible). – mario

Respuesta

10

No, no es posible. La extensión PCNTL requiere plataformas * nix.

Ahora, dicho esto, ¿qué estás tratando de hacer, y puedes resolverlo sin forzar ...?

Editar: Algunas alternativas a los procesos en segundo plano de lanzamiento:

+1

Necesito tener procesos simultáneos en ejecución. Puedo implementar el uso de cron (y usar el DB para administrar la cantidad de procesos en ejecución). Sin embargo, digamos que quería ejecutar 10 procesos concurrentes, necesitaría que el cron llamara a un script en particular 10 veces, en incrementos de 1 minuto, para poder ejecutar los 10 guiones (es decir, tardaría 10 minutos completos antes). Obtengo el número deseado de scripts concurrentes). Alternativamente, puedo hacer que las funciones "ficticias" llamen a la misma secuencia de comandos (por ejemplo, foo_1 llama a foo, foo_2 llama a foo, etc.) y tiene la llamada de cron foo_1, foo_2, etc. cada minuto. Parece kludgy. – StackOverflowNewbie

+1

@Stack: Bueno, hay más de una forma de iniciar tareas en segundo plano. Puede usar 'nohup' y' & 'en Linux para desconectar los procesos, o un objeto COM WScript: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx para ejecutar tareas en segundo plano ... – ircmaxell

+0

@Stack: editó la respuesta – ircmaxell

-1

pseudo-código:

while (TRUE) 
{ 
    $process_limit = get_process_limit(); 
    $process_count = get_process_count(); 

    if process count < process limit: 
    { 
     // get_row returns a row (as an array) from the DB that needs to be processed 
     $row = get_row(); 
     if($row === array()) 
     { 
     // Nothing to process; sleep 
     sleep(2); 
     } 
     else 
     { 
     // Process row 
     process_count(+1); 
     process_row($row); 
     process_count(-1); 
     } 

    } 
    elseif process count === process limit 
    { 
     // Do not add to the process 
     exit; 
    } 
    elseif process count > process limit 
    { 
     // Means the process limit was decreased 
     // Terminate this process instance 
     process_count(-1); 
     exit; 
    } 
} 
-1

Esto ya ha sido contestada, pero pensé que iba a añadir mi 2p .

Puede tener pcntl-fork con php en windows usando cygwin.

Es un verdadero dolor de instalar, pero si, como yo, solo quieres ejecutar un script php cli, es tu mejor opción.

me dieron instrucciones de here: