içinde dosyaya uyumsuz yazın:Temelde ben istiyorum perl'de
- belleğe bir diziye ağdan veri büyük miktarda okuyun.
- Bu dizi verilerini, diske ulaşmadan önce bzip2 ile çalıştırarak eşzamansız olarak yazın. Bu mümkün
tekrar ..
mi? Eğer bu mümkün ise, bir sonraki veriyi farklı bir diziye okumak zorunda kalacağım, çünkü AIO dokümanları bu dizinin async yazma tamamlanmadan önce değiştirilmemesi gerektiğini söylüyor. Bzip2 pass'ın okunan ağdan daha uzun süreceği için tüm yazımları diske kaydetmeyi isterim.
Bu yapılabilirlik? Aşağıda, ihtiyaç duyduğum şeyin basit bir örneği var, ancak bu, test için array @a dosyasına bir dosya okuyor.
use warnings;
use strict;
use EV;
use IO::AIO;
use Compress::Bzip2;
use FileHandle;
use Fcntl;
my @a;
print "loading to array...\n";
while(<>) {
$a[$. - 1] = $_;
}
print "array loaded...\n";
my $aio_w = EV::io IO::AIO::poll_fileno, EV::WRITE, \&IO::AIO::poll_cb;
aio_open "./out", O_WRONLY || O_NONBLOCK, 0, sub {
my $fh = shift or die "error while opening: $!\n";
aio_write $fh, undef, undef, $a, -1, sub {
$_[0] > 0 or die "error: $!\n";
EV::unloop;
};
};
EV::loop EV::LOOP_NONBLOCK;
"aio_write" ifadesindeki scalar 'a a', girdiyi tutan 'a 'dizisinden farklı bir değişkendir. – mob
Sıkıştırma için bzip yazıyorsanız, AIO'ya bile ihtiyacınız yoktur. Bzip yapmak için bir boru açın ve sonra soketten (eşzamansız) okuyun ve bu verileri bzip borusuna yazın. AnyEvent :: Handle ihtiyacınız olan her şeydir. – jrockway