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
# remarque supplemantaire
Posté par Hardy Damien . Évalué à 2.
Dam
[^] # Re: remarque supplemantaire
Posté par Antonio Da Silva (site web personnel) . Évalué à 4.
un petit :
# Crade ?
Posté par Pinaraf . Évalué à 3.
mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = os.stat(base+d+'\\'+f)
Et après, qu'utilises tu ? Le mtime uniquement...
9 variables inutiles, du code moins lisible.
mtime = os.stat(base+d+'\\'+f)[8]
Hum, en fait, une idée sur la vitesse : perl est vraiment plus lent que python à cause de défauts dans son interpréteur. Si j'ai bien compris un linux mag, l'interpréteur perl on y a ajouté des trucs au fur et à mesure, en disant "ça bouffe 0.01 seconde seulement"... Le problème c'est que ça + ça + ça + ..., ça finit par faire beaucoup !
Et le PHP n'est pas conçu pour ce genre de tâches à mon avis. Enfin, c'est que mon avis...
# Commentaire supprimé
Posté par Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.