Вот что-то в Perl, которое у меня есть в моей библиотеке (и, эй, давайте будем честными, я не собираюсь настраивать это в PHP только для того, чтобы дать вам кое-что работающее на этом языке в данный момент. можно копировать / вставлять).
#!/usr/bin/perl
use threads;
use Thread::Queue;
my @workers;
my $num_threads = shift;
my $dbname = shift;
my $queue = new Thread::Queue;
for (0..$num_threads-1) {
$workers[$_] = new threads(\&worker);
print "TEST!\n";
}
while ($_ = shift @ARGV) {
$queue->enqueue($_);
}
sub worker() {
while ($file = $queue->dequeue) {
system ('./4parser.pl', $dbname, $file);
}
}
for (0..$num_threads-1) { $queue->enqueue(undef); }
for (0..$num_threads-1) { $workers[$_]->join; }
Всякий раз, когда один из этих системных вызовов завершает свою работу, он перемещается по очереди. Да, и черт, если я знаю, почему я сделал 0..$numthreads
вместо обычной my $i = 0; $i < ...
идиомы, но я сделал это таким образом.