【发布时间】:2013-05-03 22:10:20
【问题描述】:
我找不到如何使用 POE Wheel 或任何异步进程创建和写入文件的示例。我希望能够以非阻塞方式编写大文件。我正在寻找示例,但不知道从哪里开始。
【问题讨论】:
-
谢谢。我检查了这一点,最终弄清楚了如何做到这一点。我在线程上发布了我的结果代码。您链接的文档中的示例很好,但对于 fileio 来说并不那么清楚。有一个示例引用了从 STDIN 读取的内容,但这最终帮助了我。
我找不到如何使用 POE Wheel 或任何异步进程创建和写入文件的示例。我希望能够以非阻塞方式编写大文件。我正在寻找示例,但不知道从哪里开始。
【问题讨论】:
所以,我并没有真正找到文件 io 的直接示例。但是,我设法从我找到的示例中找出了这个工作代码。我想这就是我想要的。我在这里添加它,所以如果有人有任何 cmet,它可能会帮助我或其他人改进它。或者,如果其他人正在寻找示例,他们可以看到这个。
$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");
}
}
);
【讨论】: