2011-02-02 3 views
6

C'è un modo per far funzionare pcntl_fork in WAMP? Devo sviluppare una soluzione di forking e testarla localmente.WAMP e pcntl_fork

+1

Si potrebbe provare a eseguire/compilarlo sotto Cygwin, dove PCNTL è più probabile che per funzionare. Altrimenti potresti sfoggiare qualcosa tramite l'estensione w32api se ne hai il coraggio (e se è ancora disponibile). – mario

risposta

10

No, non è possibile. L'estensione PCNTL richiede piattaforme * nix.

Ora, con quello detto, cosa stai cercando di fare, e puoi risolverlo senza forking ...?

Edit: Alcune alternative al lancio di processi in background:

+1

Ho bisogno di avere processi concorrenti in esecuzione. Posso implementare usando cron (e usando il DB per gestire il numero di processi in esecuzione). Tuttavia, supponiamo di volere 10 processi simultanei in esecuzione, avrei bisogno che il cron richiamasse un particolare script 10 volte - in incrementi di 1 minuto - per poter eseguire tutti e 10 gli script (ovvero, ci vorranno 10 minuti prima Ottengo il numero desiderato di script simultanei). In alternativa, posso avere funzioni "fittizie" che chiamano lo stesso script (ad esempio, foo_1 chiama foo, foo_2 chiama foo, ecc.) E hanno la chiamata cron foo_1, foo_2, ecc. Ogni minuto. Sembra triste. – StackOverflowNewbie

+1

@Stack: Beh, c'è più di un modo per avviare attività in background. Si potrebbe usare 'nohup' e' & 'su linux per disconnettere i processi, o un COM WScript: http://msdn.microsoft.com/en-us/library/d5fk67ky(v=vs.85).aspx oggetto a lanciare attività in background ... – ircmaxell

+0

@Stack: modificato la risposta – ircmaxell

-1

pseudo-codice:

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

Questo è già stato risposto, ma ho pensato di aggiungere il mio 2p .

Si può avere pcntl-fork con php in windows utilizzando cygwin.

È un vero problema installare, ma se come me vuoi solo uno script php per eseguire, è la soluzione migliore.

ho avuto istruzioni da here: