我无法找到如何使用 POE Wheel 或任何异步进程创建和写入文件的示例。我希望能够以非阻塞方式编写大文件。我正在寻找示例,但不知道从哪里开始。
问问题
360 次
1 回答
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");
}
}
);
于 2013-05-06T18:17:08.440 回答