2
У меня есть базовый скрипт Perl, который выполняет функцию с 20 потоками.Perl: Сделать нить сна
use threads;
use threads::shared;
use Thread::Queue;
use File::Slurp;
$| = 1; my $numthreads = 20;
my $fetch_q = Thread::Queue->new();
sub fetch {
while (my $target = $fetch_q->dequeue()) {
my $request = `curl "http://WEBSITE" -s -o /dev/null -w "%{http_code}"`; # Returns HTTP Status code of request (i.e. 200, 302, 404, etc)
if ($request eq "200") {
print "Success. Sleeping for 5 seconds.";
sleep(5);
}
else {
print "Fail. Will try again in 10 seconds.";
sleep(10);
redo;
}
}
}
my @workers = map { threads->create(\&fetch) } 1 .. $numthreads;
$fetch_q->enqueue(1 .. $max);
$fetch_q->end();
foreach my $thr (@workers) {$thr->join();}
Если условие истинно, то я хочу, чтобы нить спать в течение 5 секунд, но есть все остальные потоки продолжают. Прямо сейчас, когда я использую sleep(5)
, кажется, что весь скрипт спит в течение 5 секунд.
Как использовать sleep()
для отдельных тем?
'' cond_timedwait' в нитками :: shared' выглядит многообещающим. – thrig
какая ОС для этого? – ysth
Windows, но у меня установлен cygwin. – Bijan