Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Pythonin hitaus

Sivun loppuun

Ecaroh [11.05.2020 01:02:11]

#

Moi,

Olen aivan alkutaipaleella ohjelmoinnissa, edelliset kokemukset lukiosta Turbo Pascalilla 90-luvulla. Nyt aloin aikani kuluksi testata Pythonia Mac-ympäristössä. Tätä on varmaan moni jo ihmetellyt, mutta itselleni tuli yllättäen vastaan: Miksi Python ajaa simppelitkin ohjelmat niin hitaasti? Nykykoneissa on potkua vaikka mihin, mistä syystä tää tahmeus ihmetyttää.

peran [11.05.2020 08:26:41]

#

Ainakin osittain se on hidas, koska kyseessä on scripti-kieli eikä käännettävä.

Grez [11.05.2020 09:24:45]

#

Ecaroh kirjoitti:

Miksi Python ajaa simppelitkin ohjelmat niin hitaasti?

Kokeilin ajaa simppelin Python Hello word ohjelman

print("Hello, World!")

Siinä kesti 11 millisekuntia:

# time python test.py
Hello, World!

real    0m0.011s

Itse en ole myöskään yleisesti huomannut että Python ohjelmat olisi jotenkin ihan poikkeuksellisen hitaita. Tietenkin se on tyypillisesti hitaampi kuin vastaava käännetty ohjelma, kuten peran jo kommentoikin.

Vastaavasti jos kääntää gcc:llä vastaavan ohjelman niin kääntämiseen menee jopa enemmän aikaa:

# time gcc test.c

real    0m0.038s

Mutta sen jälkeen käännetyn ohjelman ajamiseen menee 1 ms.

En siis ole varsinaisesti varma että ymmärsinkö kysymyksesi oikein. Jos tarkoitat esim, että simppelin Hello World tyylisen ohjelman ajaminen kestää vaikka 30 sekuntia, niin sanoisin että ympäristössäsi on jotain vialla.

Anaatti [11.05.2020 09:28:13]

#

Vauhtia Pythoniin voi saada myös käyttämällä vaikkapa PyPyä, joka on keskimäärin 4.4 kertaa nopeampi tulkki kuin python.org:sta saatavilla oleva CPython (näin he itse väittävät). PyPyn tukema Python-versio ei kuitenkaan ole aivan viimeisin.

The Alchemist [11.05.2020 16:17:21]

#

Melko hyvä trolli taas. AP tulee sanomaan, että kun kieli on niin hidas, ja sen jälkeen npc:t toistelevat kilpaa, että eihän nyt niin hidas ole, kun kestää vain millisekunteja polkaista komentotulkki käyntiin. (Mikä lie itse helloworldin osuus siinäkin suoritusajassa...)

AP voisi tulla takaisin kertomaan aluksi, että millaisesta sovelluksesta oli kyse, kun se on mukamas niin hidas. Luultavasti vain koodasit sen väärin, ei siinä sen ihmeempää.

Tavalliset sovellukset eivät edes ole niin monimutkaisia, että eri kielten välisen suorituseron voisi mitenkään huomata ihmisenä. Synteettisten suorituskykytestien tuijottaminen taasen on tyhmää.

Ecaroh [11.05.2020 17:38:25]

#

Kuten kirjoitin, olen aivan uuden äärellä tässä ja ihmettelen varmaan jotain sellaista, mikä ei suurelle osaa täällä ole ihmetyksen aihe...

Omat Python-ohjelmani ovat olleet aivan simppeleitä muutaman rivin kokeiluja (ks. esim.) ja "hitaudella" tarkoitan sitä, että silmilläni näen tulosteiden rullaavan alas rivi kerrallaan, kun olisin olettanut tämän olevan (ihmissilmin havaittuna) yhtäaikainen. Ja tosiaan kyseessä on Mac / IDLE -ympäristö.

x = int(input("anna luku x : "))
y = int(input("anna toinen luku y : "))
print ("x + y =", x+y)
print ("x * y =", x*y)
print ("x / y =", x/y)
print ("x potenssiin y =", x**y)

Metabolix [11.05.2020 19:26:19]

#

Mikään kohta ohjelmassasi ei liity konkreettisesti tekstin piirtämiseen ja rullaamiseen, vaan siitä on vastuussa se ohjelma, jolle ruutu kuuluu – tässä tapauksessa siis ilmeisesti IDLE-kehitysympäristö. Näkemäsi hitaus johtuu siis IDLE-kehitysympäristöstä eikä Pythonista.

Voit hyvin käynnistää ohjelman myös suoraan komentorivillä (Terminal vai mikä onkaan Macissa), jolloin tekstin näyttämisestä vastaa se komentorivi-ikkuna ja saat ehkä eri käsityksen nopeudesta.

Tai toisesta näkökulmasta: Voisit laittaa ohjelmaasi vaikka kuinka paljon monimutkaisempia laskuja, ja ohjelman kulku ruudulla pysyisi silti yhtä nopeana. Tästä myös näkisit, että näkyvä hitaus johtuu jostain muusta kuin itse Python-ohjelmasta.

Ecaroh [12.05.2020 00:24:49]

#

Kiitos vastauksesta!

Tein ehdottamiasi vertailuja ja todellakin tämä IDLE-ympäristö on syypää tuohon hidasteluun... Esim. Python Launcherilla ajettuna sama tulee niin kuin sen oletin tulevan eli ilman havaittavaa viivettä. Mikäköhän sen IDLEn tekee niin hitaaksi...?

Metabolix [12.05.2020 13:36:49]

#

Ecaroh kirjoitti:

Mikäköhän sen IDLEn tekee niin hitaaksi...?

Ilmeisesti IDLEssä on huonosti toteutettu tekstin tulostus. Toisaalta tavallaan alkeita opetellessa voi olla jopa hyvä, että ohjelmoija ehtii nähdä, miten ohjelma etenee...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta