Re: Fork PHP script X at a time.

From: Date: Mon, 20 Sep 2004 22:06:09 +0000
Subject: Re: Fork PHP script X at a time.
References: 1 2 3  Groups: php.general 
Request: Send a blank email to php-general+get-197350@lists.php.net to get a copy of this message
John Wards wrote:
On Mon, 2004-09-20 at 16:56, Marek Kilimajer wrote:
play around with popen() and stream_select()
Oooh that looks handy. More night time reading I think! Any further ideas to save a man with a cold from using his brain would be great! Cheers John
Wanted to do something interesting, so here is something to get you started. It opens a pool of 10 sleep processes that sleep for a random time. Everytime a sleep process ends its sleep and exits, a new sleep process is created. However, it contains some very, very ugly hack. stream_select() breaks index association of its parameters, so to find out what stream changed status one has to compare values of the original array ($handles) and the array passed to stream_select() ($read). Is it how it's supposed to work or am I missing something? <?php $handles = array(); for($i = 0; $i < 10; $i++) { $handles[$i] = popen('sleep ' . rand(1, 10), 'r'); echo "Opened '$handles[$i]'\n"; } while(count($handles)) { $read = $handles; if (false === ($num_changed_streams = stream_select($read, $write = NULL, $except = NULL, 10))) { // don't forget to change tv_sec param
     /* Error handling */
     echo "ERROR\n";
} elseif ($num_changed_streams > 0) {
     foreach($read as $key => $handle) {
       echo "Closing '$handle'\n";
       //echo fread($handle, 2096);
       pclose($handle);
       if($i < 50) {
         $handles[$i] = popen('sleep ' . rand(1, 10), 'r');
         echo "Opened '$handles[$i]'\n";
         $i++;
       }
     }
     // UGLY hack here
     $handles = array_diff($handles, $read);
} } ?>

« previous php.general (#197350) next »