Kezdőoldal » Számítástechnika » Programozás » Mire jo a with open () f...

Mire jo a with open () f Pythonban?

Figyelt kérdés

Pledaul:


with open("xx", "r") as f:

  do()


Ha hiba keletkezik a programban a processz ugyis terminalodik es minden nyitott fajl lezarodik vagy nem?


2015. máj. 4. 11:51
 1/4 A kérdező kommentje:
Ugyertem with nelkul is lezarodna a fajl amikor a processz exception-t ad
2015. máj. 4. 11:52
 2/4 A kérdező kommentje:
az operacios rendszer altal
2015. máj. 4. 11:53
 3/4 anonim ***** válasza:

Modern operációs-rendszerek lezárják a megnyitott fájlokat ha a program kilép, ez igaz. Ezen felül normális lefutás esetén a kilépés előtt lefut a garbage collector és lezárja a megnyitott fájlokat.


A probléma ott kezdődik hogy a fájl írás általában bufferelt. A fájl lezárása előtt a program kiüríti a buffert és a tartalmát beleírja a fájlba. De ha a program elszáll és az operációs-rendszernek kell lezárnia, akkor az adat elveszi ami a bufferben volt (ha az nem volt üres).


Ezen kívül az is megfontolandó hogy az O/S csak véges számú fájlleírót tud használni, és a fájl felesleges nyitva tartása elvesztegetett erőforrást is jelent.


De a fő probléma talán nem is ez. Egy bonyolult alkalmazásnál már figyelni kell arra hogy mikor melyik programrész milyen erőforrásokat használ, mert mikor a program kezd átláthatatlan lenni ráadásul a programot nem egyedül írod, akkor sok fejtörést tud okozni ha nem zárod le a azokat az erőforrásokat amiket már nem használsz, és ez nem csak fájlokra vonatkozik.


Nagy eséllyel ha írsz egy fájlt akkor később használni is akarod azt, de ha nem zárod le, akkor nem fogod tudni használni (rosszabb esetben véletlenszerű hogy tudod e használni, a gc lefutási idején múlik). Ez hibákhoz vezethet amit el szeretnél kerülni. Viszont a lezáratlan erőforrások a deadlockok és kiéheztetések elsődleges kiváltó okai, ami egy igazán összetett program esetén ez a programozók rémálma tud lenni. Nem kerül semmibe felszabadítani az erőforrásokat amiket nem használsz.


Ha egyszerű pár soros programot írok amiben garantálni tudom hogy nem lehet belőle probléma, én is el szoktam hagyni sokszor, de ha valami komolyabba kezdesz tedd meg magadnak ezt a szívességet, és zárd le.


Más erőforrásoknál, amit az O/S nem felügyel közvetlenül, ez kifejezetten hasznos, például nyitott portok esetén. Ott ha elszáll a program, a port percekig használhatatlan lesz, egyes operációs rendszereknél meg csak az újraindítás segít.

2015. máj. 4. 14:36
Hasznos számodra ez a válasz?
 4/4 iostream ***** válasza:
Meg ha hiba keletkezik a programban, de azt a programon belül lekezeled, akkor nem záródik be. Előbb-utóbb minden program véget ér, de ez igen sok idő is lehet.
2015. máj. 5. 11:03
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!