Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.autre : Perl VS. php VS. python

Posté par Hardy Damien (page perso, ) le 10 juin 2005
Voila pour les besoin de mon taf j'avais besoin d'avoir la distribution des reception de fichiers durant la journée je me suis donc lancé dans un script PHP qui m'est plus connus pour faire un fichier lisible sous gnuplot ...

ensuite pour voir je l'ai fait en python et j'ai été impressionné par sa vitesse, ensuite pour voir en Perl ou j'ai été impressionné par sa lenteur ...



les fichiers sont sur un lecteur réseau windows.



en python :



import os, datetime

dirs = ['LUNDI\\Traites','MARDI\\Traites','MERCREDI\\Traites','JEUDI\\Traites','VENDREDI\\Traites','SAMEDI\\Traites','DIMANCHE\\Traites']

base = 'B:\\INPUT\\Reception\\RECEP\\'



tab = {}



for d in dirs:

print d,"\n"

files = os.listdir(base+d)

for f in files:

mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = os.stat(base+d+'\\'+f)

dt = datetime.datetime.fromtimestamp(mtime)

dt = dt.time()

if tab.has_key(dt.strftime('%H:%M')):

tab[dt.strftime('%H:%M')] += 1

else:

tab[dt.strftime('%H:%M')] = 1



f = file('timedat.dat','w+')

k = tab.keys()

k.sort()





for i in k:

f.write(i+"\t"+`tab[i]`+"\r\n")

f.close()





real 2m6.514s

user 0m0.031s

sys 0m0.015s





en php :



<?php



//Define some data

$time_distrib = array();

$dirs = array('LUNDI\\Traites','MARDI\\Traites','MERCREDI\\Traites','JEUDI\\Traites','VENDREDI\\Traites','SAMEDI\\Traites','DIMANCHE\\Traites');

$base = "B:\\INPUT\\Reception\\RECEP\\";

$now = mktime(0,0,0,9,6,2005);



foreach ($dirs as $dir) {



$files = scandir($base.$dir);

foreach ($files as $file) {

$date = filemtime ($base.$dir.'\\'.$file);

$time = mktime( date("H",$date), date("i",$date), 0, 1 , 2, 1970 );



if (isset ($time_distrib[$time]))

$time_distrib[$time] ++ ;

else

$time_distrib[$time] = 1;

}

}



ksort($time_distrib);

$fd = fopen ('timedat.dat','w+');

foreach ($time_distrib as $key => $value) {

$key = strftime( '%H:%M', $key);

fwrite($fd, "$key\t$value\n");

}

fclose($fd);



?>



real 16m3.337s

user 0m0.030s

sys 0m0.015s



en perl :



use POSIX qw(strftime);

@dirs = ('LUNDI\\Traites','MARDI\\Traites','MERCREDI\\Traites','JEUDI\\Traites','VENDREDI\\Traites','SAMEDI\\Traites','DIMANCHE\\Traites');

$base = 'B:\\INPUT\\Reception\\RECEP\\';

foreach $d (@dirs) {

print $base,$d,"\n";

opendir(DIR, $base.$d) || die "can't opendir $base.$d: $!";

@dir = readdir(DIR);

for (@dir) {

$mtime = (stat($base.$d.'\\'.$_))[9];

$stat[strftime('%H:\%M', gmtime($mtime))] ++;

}

}



foreach $hour (sort(keys(%stat))) {

print $hour,$stat[$hour],"\n";

}



real 20m29.706s

user 0m21.749s

sys 1m48.390s





Comment expliquer que python soit aussi rapide ? (le langage que je connais le mieux est PHP)



Dam

> Lire le message (4 commentaires, moyenne: 2,8).  

Vous avez demandé le commentaire #587302.

remarque supplemantaire

Posté par Hardy Damien (page perso, ) le 10/06/2005 à 16:06. (lien). Évalué à 2.

Dans les 7 répertoires il y a 130 000 fichiers (pour un peu plus de 1,5 Go mais ca n'importe pas)

Dam

  • [^]Re: remarque supplemantaire

    Posté par Antonio Da Silva (page perso, ) le 11/06/2005 à 09:59. (lien). Évalué à 4.

    Pourquoi le code PERL est le seul qui n'écrive pas dans un fichier, mais plutôt dans la sortie standard ?

    un petit :


    open FIC, ">time.dat";
    foreach $hour (sort(keys(%stat))) {
    print FIC $hour,$stat[$hour],"\n";
    }
    close FIC;