Mire jo a with open () f Pythonban?
Pledaul:
with open("xx", "r") as f:
do()
Ha hiba keletkezik a programban a processz ugyis terminalodik es minden nyitott fajl lezarodik vagy nem?
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!