как ждать на асинхронных файлах в Perl - PullRequest
3 голосов
/ 30 августа 2011

Я пытаюсь проверить модуль журналирования, который асинхронно записывает в файл ... модульный тест пытается прочитать журнал, чтобы убедиться, что записанное сообщение соответствует ожидаемому. Однако я обнаружил, что асинхронные записи модуля не достигают файла до тех пор, пока не завершатся модульные тесты, даже если я сплю, чтобы ждать файл в течение произвольного промежутка времени. Я проверил, что файлы не закрываются до самого конца, добавив оператор печати рядом с aio_close. Что я могу сделать, чтобы проверить это?

        #approximately the way this works:
        aio_open($pathname,
             $flags,
             $mode,
             sub
             {
                 my $fh = shift;
                 aio_write($fh,
                             0,
                             length($log),
                             $log,
                             0,
                             sub
                             {
                                 print "here";
                                 aio_close($fh, sub {});
                             });
             });

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Хорошо, немного покопавшись, я обнаружил, что могу позвонить ...

IO::AIO::flush;

Это приводит к сбросу всех асинхронных буферов перед выполнением моего теста.

1 голос
/ 31 августа 2011

Пусть ваш файл-писатель примет подпункт "done_writing" обратного вызова.

Если имеется, позвоните.

Попросите юнит-тест предоставить обратный вызов, который либо создаст сенсорный файл, либо просто установит флаг «Готов» в юнит-тесте.

В качестве альтернативной версии обратный вызов подает сигнал и настраивает модульный тест на режим ожидания с обработчиком сигнала для этого сигнала

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...