【问题标题】:PERL POE ReadWrite Wheel File IO Example?PERL POE读写轮文件IO示例?
【发布时间】:2013-05-03 22:10:20
【问题描述】:

我找不到如何使用 POE Wheel 或任何异步进程创建和写入文件的示例。我希望能够以非阻塞方式编写大文件。我正在寻找示例,但不知道从哪里开始。

【问题讨论】:

  • 谢谢。我检查了这一点,最终弄清楚了如何做到这一点。我在线程上发布了我的结果代码。您链接的文档中的示例很好,但对于 fileio 来说并不那么清楚。有一个示例引用了从 STDIN 读取的内容,但这最终帮助了我。

标签: perl file-io poe


【解决方案1】:

所以,我并没有真正找到文件 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");
                    }
                }
            );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2012-09-30
    • 2014-01-16
    相关资源
    最近更新 更多