2013-05-03 29 views
1

我無法找到如何使用POE Wheel或任何異步過程創建和寫入文件的示例。我希望能夠以非阻塞的方式編寫大文件。我正在尋找示例,但不知道從哪裏開始。PERL POE ReadWrite Wheel文件IO示例?

+0

有很好的文檔可供選擇:http://search.cpan.org/~rcaputo/POE-1.354/lib/POE/Wheel/ReadWrite.pm – Matthias 2013-05-03 22:56:07

+0

感謝。我檢查了一下,最終找出瞭如何去做。我在線程上發佈了我的結果代碼。您鏈接的文檔中的示例很好,但對於文件不太清楚。有一個例子引用了STDIN的閱讀材料,這是最終幫助我的那個。 – dudeman 2013-05-06 18:24:39

回答

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"); 
        } 
       } 
      );