Проверьте, если труба пуста, прежде чем писать

Я унаследовал Perl-программу, которая открывает канал для другой программы:

open(CONSUMER, "|/bin/consumer >> logfile 2>&1") ||
    die "Comsumer open fail\n";
select(CONSUMER); $| = 1;

и затем многократно пишет в этот канал в цикле:

while (<INPUT>) {
    $command=$_;
    ...
#   is CONSUMER empty?
    print CONSUMER $command;
}

Кажется, что куча этих команд буферизируется в буфере канала. Это монополизирует услугу, которую использует ПОТРЕБИТЕЛЬ. В какой-то момент это:

select(undef, undef, undef, 0.1);

был добавлен в конец петли как (не очень эффективный) бандит.

Кажется, что было бы наиболее эффективным, если бы была возможность проверки перед print чтобы убедиться, что буфер трубы пуст, прежде чем продолжить print,

Это вообще возможно?

0 ответов

Другие вопросы по тегам