2024. május 3., péntek

Gyorskeresés

Shell script vs. Python - gyorsteszt

Írta: |

[ ÚJ BEJEGYZÉS ]

Echo/Print 90000 sort, minden sorban az aktuális sorszámot, while és for ciklussal egyaránt.

Időeredmények:

Shell Script:

4.497 sec - for
248.98 sec - while

Python:

0.962 sec - for
1.098 sec - while

Scriptek:

Shell - for

#!/bin/bash
for i in {1..90000}
do
echo "$i"
done

Shell - while

#!/bin/sh

a=0

while [ $a -lt 9000 ]
do
echo $a
a=`expr $a + 1`
done

Python - for

#!/usr/bin/python

for i in range(1,90000):
print i

Python - while

#!/usr/bin/python

count = 0
while (count < 90000):
print count
count = count + 1

--
A teszt Raspberry Pi3 alatt futott, Raspbian 8.7-es rendszerrel.

Hozzászólások

(#1) Fecogame


Fecogame
veterán

Nekem meglepő volt, hogy bizonyos esetben 240x gyorsabb a Python, mint a shell script. :)

Lassú a mobilinterneted? 4G/LTE antennák, közvetlenül raktárról ---> http://bit.ly/LTE_Antennak

(#2) Jester01


Jester01
veterán

A python érzékeny a whitespace-re, értelmes ember ezért nem is használja. Ez csak azért különösen vicces mert a cikkben lévő kód is rossz ilyen szempontból :))

Mivel az első shell scriptben bash van, ezért a másodikat is át lehet írni bash-ra, hogy ne indítson minden alkalommal külső processzt az expr miatt, imígyen:

#!/bin/bash

a=0

while [ $a -lt 90000 ]
do
echo $a
a=$((a + 1))
done

Ez nálam pontosan olyan gyors mint a python (terminál output limit lehet).

Jester

(#3) dabadab válasza Fecogame (#1) üzenetére


dabadab
titán

Persze, mert shellből folyamatosan külső processzeket indítasz el.

Próbáld meg pl a while-t így, nagyjából két nagyságrenddel lesz gyorsabb:

#!/bin/bash

a=0

while [ $a -lt 9000 ] ; do
echo $a
let a++
done

szerk: így jár az, aki hsz írása közben elmegy ebédelni :D

[ Szerkesztve ]

DRM is theft

(#4) dabadab válasza Jester01 (#2) üzenetére


dabadab
titán

"A python érzékeny a whitespace-re, értelmes ember ezért nem is használja."

fixed that for you :DDD

DRM is theft

(#5) Jester01 válasza dabadab (#4) üzenetére


Jester01
veterán

Ugye láttad, hogy a cikkben is elromlott az indentáció QED.
Majd biztos én fogom mindig kézzel javítgatni ha valahol elveszik... :U

Kompatibilitásról meg hírből sem hallottak a kedves python fejlesztők. Ilyen-olyan scriptek miatt amik csak a saját minor (!) verziójukkal mennek, most is van telepítve 2.4, 2.5, 2.6, 2.7, 3.0, 3.1 és 3.2... köszönöm, de ne szemeteljék már tele a gépemet.

[ Szerkesztve ]

Jester

(#6) Feruendios


Feruendios
aktív tag

Ne szorakozz Py-vel meg Bash-el rakj fel egy Node-ot.

Sajnos mar nincs magyar billentyuzetem :(

(#7) vargalex


vargalex
félisten

Shell script megoldás:

#!/bin/sh
echo {1..90000} | tr ' ' '\n'

Alex

(#8) sztanozs


sztanozs
veterán

from timeit import default_timer as timer

def testTime(execution):
start = timer()
execution()
end = timer()
return(execution.__name__, end - start)

def while1():
count = 9000
while count:
count = count - 1
print(9000-count)
pass


def while2():
count = 0
while (count < 90000):
count += 1
print(count)
pass

def for1():
for i in range(1,90000):
print(i)
pass

de = {}
a,b = testTime(while1)
de[a] = b
a,b = testTime(while2)
de[a] = b
a,b = testTime(for1)
de[a] = b
print(de)

Eredmény:
{
'while1': 0.017804100422010548,
'while2': 0.2117797429410634,
'for1': 0.2141544650973869
}

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#9) buherton


buherton
őstag

Nem tartom szerencsésnek az stdout-ra kiírással járó teszteknek. A programok jó részt úgy sem így működnek.

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!

(#10) RazorSh4rk


RazorSh4rk
kezdő

Ezzel az a baj, hogy a futás nagy része az std művelet.

e

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.