2013-05-03 3 views
1

У меня возникли проблемы с поиском примера создания и записи в файл с использованием колеса POE или любого асинхронного процесса. Я хочу, чтобы писать большие файлы не блокируя. Я ищу примеры, но не знаю с чего начать.PERL POE ReadWrite Wheel File IO Пример?

+0

Существует очень хорошая документация: http://search.cpan.org/~rcaputo/POE-1.354/lib/POE/Wheel/ReadWrite.pm – Matthias

+0

Спасибо. Я проверил это и выяснил, как это сделать. Я отправил свой итоговый код в поток. Примеры в документе, который вы связали, были хорошими, но не так понятными для fileio. Был пример, который ссылался на чтение из STDIN, и именно это помогло мне. – dudeman

ответ

1

Итак, я действительно не нашел прямого примера для файла io. Но мне удалось выяснить этот рабочий код из примеров, которые я нашел. Я думаю, что это то, что я хочу. Я добавляю его здесь, поэтому, если у кого-то есть комментарии, это может помочь мне или другому улучшить его. Или, если кто-то ищет пример, он может это увидеть.

   $self->{FILEIO_SESSION} = POE::Session->create(
       inline_states => { 
        _start => sub { 
         my ($kernel, $heap) = @_[ KERNEL, HEAP ]; 
         $kernel->alias_set($fileio_uuid); 

         $heap->{wheels}->{$fileio_uuid} = POE::Wheel::ReadWrite->new(
          InputHandle => $infile_fh , 
          OutputHandle => $outfile_fh, 
          Driver => POE::Driver::SysRW->new(), 
          Filter => POE::Filter::Line->new(), 
          InputEvent => 'readLineEvent', 
          ErrorEvent => 'errorEvent' 
         ); 
        }, 
        _stop => sub { 
         my ($kernel, $heap) = @_[ KERNEL, HEAP ]; 
         print "Removing fileio session\n"; 
         $kernel->alias_remove($fileio_uuid); 
        }, 
        readLineEvent => sub { 
         my ($kernel, $heap, $input) = @_[ KERNEL, HEAP, ARG0 ]; 
         print "read a line...writing to file...\n"; 
         $heap->{wheels}->{$fileio_uuid}->put($input); 
        }, 
        errorEvent => sub { 
         my ($kernel, $heap) = @_[ KERNEL, HEAP ]; 
         print "Everything either went to hell or we got to the end. Shutting down...\n"; 
         delete $heap->{wheels}->{$fileio_uuid}; 
         $kernel->yield("_stop"); 
        } 
       } 
      ); 
Смежные вопросы