<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Désolé si je passe pour un Philistin, mais pourquoi ne pas faire ça en séquentiel et en Python? <div class=""><br class=""></div><div class="">Pour être constructif, j’ai fait le test (c’est un peu plus verbeux, mais c’est assez clair)</div><div class=""><br class=""></div><div class=""><div class=""><font face="Courier New" class="">#!/usr/bin/env python3</font></div><div class=""><font face="Courier New" class=""># -*- coding: utf-8 -*</font></div><div class=""><font face="Courier New" class="">"""</font></div><div class=""><font face="Courier New" class="">Read file from stdin, fix dates and give totals</font></div><div class=""><font face="Courier New" class="">"""</font></div><div class=""><font face="Courier New" class="">import sys</font></div><div class=""><font face="Courier New" class="">import time</font></div><div class=""><font face="Courier New" class="">from dateutil.parser import parse as date_parse</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">start_time = time.time()</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># extract the values</font></div><div class=""><font face="Courier New" class="">lines = [l.strip().split(" ", 1) for l in sys.stdin.readlines() if l.strip()]</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># split</font></div><div class=""><font face="Courier New" class="">lines = [(float(a), date_parse(d)) for a, d in lines]</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class=""># output</font></div><div class=""><font face="Courier New" class="">print('\n'.join(["%11.2f %s" % (a, d) for a, d in lines]))</font></div><div class=""><font face="Courier New" class="">print("%11.2f" % sum([a for a, d in lines]))</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">print("--- %s seconds ---" % (time.time() - start_time), file=sys.stderr)</font></div><div class=""><br class=""></div><div class="">En exécutant sur mon Raspberry Pi j’obtiens:</div><div class=""><div class=""><font face="Courier New" class=""> 3569.00 2011-12-29 17:07:20</font></div><div class=""><font face="Courier New" class=""> 594.40 2015-03-05 05:44:40</font></div><div class=""><font face="Courier New" class=""> 9546.85 2015-12-31 06:56:45</font></div><div class=""><font face="Courier New" class=""> 3445.75 2016-07-14 18:43:15</font></div><div class=""><font face="Courier New" class=""> 4674781.85</font></div><div class=""><font face="Courier New" class="">--- 6.447550058364868 seconds ---</font></div></div><div class=""><div class=""><br class="webkit-block-placeholder"></div><div class="">Ce qui n’est pas mal…</div><div class=""><br class=""></div><div class="">Et voici ma config (Raspberry 1B, je crois):</div><div class=""><div class=""><font face="Courier New" class="">cat /proc/cpuinfo</font></div><div class=""><font face="Courier New" class="">processor<span class="Apple-tab-span" style="white-space:pre"> </span>: 0</font></div><div class=""><font face="Courier New" class="">model name<span class="Apple-tab-span" style="white-space:pre"> </span>: ARMv6-compatible processor rev 7 (v6l)</font></div><div class=""><font face="Courier New" class="">BogoMIPS<span class="Apple-tab-span" style="white-space:pre"> </span>: 697.95</font></div><div class=""><font face="Courier New" class="">Features<span class="Apple-tab-span" style="white-space:pre"> </span>: half thumb fastmult vfp edsp java tls</font></div><div class=""><font face="Courier New" class="">CPU implementer<span class="Apple-tab-span" style="white-space:pre"> </span>: 0x41</font></div><div class=""><font face="Courier New" class="">CPU architecture: 7</font></div><div class=""><font face="Courier New" class="">CPU variant<span class="Apple-tab-span" style="white-space:pre"> </span>: 0x0</font></div><div class=""><font face="Courier New" class="">CPU part<span class="Apple-tab-span" style="white-space:pre"> </span>: 0xb76</font></div><div class=""><font face="Courier New" class="">CPU revision<span class="Apple-tab-span" style="white-space:pre"> </span>: 7</font></div><div class=""><font face="Courier New" class=""><br class=""></font></div><div class=""><font face="Courier New" class="">Hardware<span class="Apple-tab-span" style="white-space:pre"> </span>: BCM2708</font></div><div class=""><font face="Courier New" class="">Revision<span class="Apple-tab-span" style="white-space:pre"> </span>: 0010</font></div><div class=""><font face="Courier New" class="">Serial<span class="Apple-tab-span" style="white-space:pre"> </span>: 00000000e6fb0385</font></div></div>
<div class=""><br class=""></div><div class="">Comme quoi Python est un bon camion pour les tâches système.</div><div class=""><br class=""></div><div class="">Par contre je suis conscient qu’on ne fait pas toujours les choses d’une certaine façon parce que c’est facile, mais parce qu’il y a quelque chose à apprendre et par esprit d'aventure. Autrement il n’y aurait pas de motards, et tout le monde choisirait le confort prosaïque de la bagnole...</div><div class=""><br class=""></div><div class="">Bonne soirée,</div><div class="">Laurent</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><br class=""><div><blockquote type="cite" class=""><div class="">Le 15 févr. 2018 à 21:01, felix <<a href="mailto:felix@f-hauri.ch" class="">felix@f-hauri.ch</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><div class="">On Thu, Feb 15, 2018 at 07:56:21AM +0100, Laurent Franceschetti wrote:<br class=""><blockquote type="cite" class=""><br class="">Surtout quel est le problème que cette méthode résoud, et quelle est l’idée <br class="">centrale de la méthode?<br class=""></blockquote><br class="">Eliminer les ``forks'' répétitifs qui peuvent être évités.<br class=""><br class="">Petit exemple: Voici un fichier:<br class=""><br class=""> $ wget <a href="http://f-hauri.ch/vrac/scTestFile.raw.gz" class="">http://f-hauri.ch/vrac/scTestFile.raw.gz</a><br class=""> scTestFile.raw.gz 100%[===================>] 12.14K --.-KB/s in 0.004s<br class=""><br class="">Qui contient des lignes (1000) de montants suivits de dates:<br class=""><br class=""> $ zcat scTestFile.raw.gz | (head -n3;tail -n7)<br class=""> 2032.55 Jul 22 00:12:45 2007<br class=""> 6229.85 Apr 19 20:31:15 2010<br class=""> 3089.75 Sun Nov 2 08:48:10 2014<br class=""> 3816.30 Sat Nov 19 21:12:50 2016<br class=""> 7934.70 May 23 16:47:40 2008<br class=""> 2969.45 Aug 30 2017 01:43:45<br class=""> 3569.00 2011-12-29 17:07:20<br class=""> 594.40 Thu Mar 5 05:44:40 2015<br class=""> 9546.85 Dec 31 2015 06:56:45<br class=""> 3445.75 2016-07-14 18:43:15<br class=""><br class="">Pour<br class=""> - unifier la présentation des dates et<br class=""> - calculer le total des montants,<br class="">je peux:<br class=""><br class=""> $ tot=0.0<br class=""> $ time while read val date;do<br class=""> tot=$(bc -l <<<"$tot+$val")<br class=""> printf "%11.2f %(%a %d %b %Y %T)T\n" $val $(<br class=""> date -d "$date" +%s<br class=""> )<br class=""> done < <(zcat scTestFile.raw.gz) > >(head -n3;tail -n7)<br class=""> 2032.55 dim 22 jui 2007 00:12:45<br class=""> 6229.85 lun 19 avr 2010 20:31:15<br class=""> 3089.75 dim 02 nov 2014 08:48:10<br class=""> 3816.30 sam 19 nov 2016 21:12:50<br class=""> 7934.70 ven 23 mai 2008 16:47:40<br class=""> 2969.45 mer 30 aoû 2017 01:43:45<br class=""> 3569.00 jeu 29 déc 2011 17:07:20<br class=""> 594.40 jeu 05 mar 2015 05:44:40<br class=""> 9546.85 jeu 31 déc 2015 06:56:45<br class=""> 3445.75 jeu 14 jui 2016 18:43:15<br class=""> real 2m0.433s<br class=""> user 0m20.960s<br class=""> sys 0m24.550s<br class=""><br class="">Euh oui, je l'ai fait sur un raspberry-pi... 2 minutes!<br class=""><br class=""> $ echo $tot<br class=""> 4674781.85<br class=""><br class="">Bon, à présent voyons:<br class=""><br class=""> $ wget <a href="https://f-hauri.ch/vrac/shell_connector.sh" class="">https://f-hauri.ch/vrac/shell_connector.sh</a><br class=""> shell_connector.sh 100%[===================>] 7.93K --.-KB/s in 0.005s <br class=""><br class=""> $ . shell_connector.sh <br class=""> $ newConnector /usr/bin/bc -l 0 0 <br class=""> $ newConnector /bin/date '-f - +%s' @0 0<br class=""> $ echo >&$BCIN tot=0<br class=""><br class="">Oui, je stoque la variable tot dans `bc`...<br class=""><br class=""> $ time while read val date ;do<br class=""> echo >&$BCIN tot=tot+$val<br class=""> myDate "$date" mDate<br class=""> printf "%11.2f %(%a %d %b %Y %T)T\n" $val $mDate<br class=""> done < <(zcat scTestFile.raw.gz) > >(head -n3;tail -n7)<br class=""> 2032.55 dim 22 jui 2007 00:12:45<br class=""> 6229.85 lun 19 avr 2010 20:31:15<br class=""> 3089.75 dim 02 nov 2014 08:48:10<br class=""> 3816.30 sam 19 nov 2016 21:12:50<br class=""> 7934.70 ven 23 mai 2008 16:47:40<br class=""> 2969.45 mer 30 aoû 2017 01:43:45<br class=""> 3569.00 jeu 29 déc 2011 17:07:20<br class=""> 594.40 jeu 05 mar 2015 05:44:40<br class=""> 9546.85 jeu 31 déc 2015 06:56:45<br class=""> 3445.75 jeu 14 jui 2016 18:43:15<br class=""> real 0m8.043s<br class=""> user 0m2.370s<br class=""> sys 0m0.800s<br class=""><br class="">Voilà, en évitant ~2000 forks, je le fais en 8" au lieu de 120"!<br class=""><br class=""> $ myBc tot montotal<br class=""> $ echo $montotal <br class=""> 4674781.85<br class=""><br class="">Tant que mon shell courant existe et que je ne ferme pas les<br class="">descripteurs, je peux continuer à les utiliser...<br class=""><br class=""> $ ps --sid $(ps ho sid $$) fw<br class=""> PID TTY STAT TIME COMMAND<br class=""> 4625 pts/2 Ss 0:00 -bash<br class=""> 9146 pts/2 S 0:00 \_ /usr/bin/bc -l<br class=""> 9150 pts/2 S 0:00 \_ /bin/date -f - +%s<br class=""> 9188 pts/2 R+ 0:00 \_ ps --sid 4625 fw<br class=""><br class="">Voilà, j'espère avoir montré l'intérêt de la méthode.<br class="">Bonne soirée!<br class=""><br class="">-- <br class=""> Félix Hauri - <<a href="mailto:felix@f-hauri.ch" class="">felix@f-hauri.ch</a>> - <a href="http://www.f-hauri.ch" class="">http://www.f-hauri.ch</a><br class="">_______________________________________________<br class="">gull mailing list<br class=""><a href="mailto:gull@forum.linux-gull.ch" class="">gull@forum.linux-gull.ch</a><br class="">http://forum.linux-gull.ch/mailman/listinfo/gull<br class=""><br class=""></div></div></blockquote></div><br class=""></div></div></body></html>