Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AnyEvent i/o watchers 
:(
    Опции темы
nIkTo
Дата 22.6.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Существует некоторая сетевая папка, она при монтирована как диск (к примеру S:\)
Необходимо обойти дерево каталогов этого диска ... так как папка сетевая, то соответственно возникает некоторая задержка при прочтении каталога (иногда доходит до 3-5 секунд).
А раз есть ожидания то мне кажется логичнее всего было бы использование события, вот пытаюсь понять как можно было бы  реализовать решение при помощи AnyEvent но разобраться сложно, не хватает информации =(
Вот есть такая штука как I/O WATCHERS :

Код

$w = AnyEvent->io (
      fh   => <filehandle_or_fileno>,
      poll => <"r" or "w">,
      cb   => <callback>,
   );


как бы это сделать но для dh (dirhandle) ? то есть, как появились данные в dirhandle вызвать колбэк ?
PM   Вверх
DurRandir
Дата 23.6.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Помотрите в сторону IO::AIO, у него есть интеграция с AnyEvent
PM   Вверх
nIkTo
Дата 23.6.2010, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Смотрел, но по моему это не то :

Код

#!/usr/bin/perl -w
use strict;
use IO::AIO;

my $root = "s:\\";
scan($root);

sub scan {
  my $path = shift;
  
  aio_readdir $path, sub {
    my $objects = shift;
    my @dirs = ();
    
    foreach my $object (@$objects) {
      print $path."/".$object."\n";
      if (-d $path."/".$object) {
        push @dirs, $path."/".$object;
      }
    }
    
    &scan($_) for @dirs;
  };
}

PM   Вверх
DurRandir
Дата 24.6.2010, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 335
Регистрация: 27.9.2009

Репутация: 14
Всего: 17



Ну тогда я не понял вопроса) Этот код как раз и прочитает в фоне всё дерево, можно даже от -d  избавиться, запросив aio_readdirx + IO::AIO::READDIR_DENTS
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0460 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.