Comment puis-je accéder les fichiers gzip sans créer de nouveaux processus?
Mon application lit et écrit beaucoup de moyen pour les gros fichiers. Je voudrais stocker ces informations en format zippé. Économise de l'espace disque et de temps réseau.
Une façon de le faire est avec ceci:
sub fopen {
my $mode = shift;
my $filename = shift;
if ($filename =~ /\.gz$/) {
if ($mode eq "<") {
open(my $fp, "-|", "/usr/bin/gzcat $filename");
#my $fp = gzopen($filename, "rb") ;
return $fp;
}
if ($mode eq ">") {
open(my $fp, "|-", "/usr/bin/gzip > $filename");
#my $fp = gzopen($filename, "wb") ;
return $fp;
}
} else {
open(my $fp, $mode, $filename);
return $fp;
}
}
Je peux changer mon code existant tout simplement en échangeant les appels à ouvrir.
Ainsi qu'il ressort de la fonction, j'ai aussi pensé à utiliser la librairie zlib/compresser de la bibliothèque. Le problème est que le résultat ne peut être passée autour d'un pointeur de fichier.
Est-il un moyen de le faire ce qui n'a pas impliqué la création d'un groupe de processus supplémentaire?
Processus supplémentaire PEUT être utile. Si votre perl processus est beaucoup de travail et que vous avez plusieurs processeurs, vous pourriez obtenir de meilleures performances en avoir un autre processus (sur 1 CPU) dédié à la zip/unzip et puis tout un processus (sur un 2ème CPU) dédié à votre programme perl.
L'ordinateur travail est pour l'exécution des processus pour vous. Échappent pas.
L'ordinateur travail est pour l'exécution des processus pour vous. Échappent pas.
OriginalL'auteur mmccoo | 2011-04-14
Vous devez vous connecter pour publier un commentaire.
À partir de la documentation de IO::Uncompress::Gunzip
La variable
$z
est maintenant un descripteur de fichier que vous pouvez utiliser comme d'habitude.OriginalL'auteur Eric Strom
Juste pour ajouter quelques informations sur les précédentes réponses, à partir d'un vieux banc j'ai fait, PerlIO::gzip est plus rapide que IO::Uncompress::Gunzip.
OriginalL'auteur sebthebert
Regarder les IO::* espace de noms sur votre Perl version.
Par exemple Debian old-stable (5 - Lenny) Perl et les prochaines versions, les navires IO::Uncompress::Gunzip et IO::Uncompress::AnyUncompress.
OriginalL'auteur poisonbit