Tudtad, hogy kontextuskezelő nem csak fájlműveletekben használható?

A with…as… szerkezetben alkalmazható kontextuskezelő fogalmát legtöbbször a fájlmegnyitással kapcsolatban szokták bevezetni, mert valóban ez talán a leggyakoribb használati eset.  Mindazonáltal a kontextuskezelők sok más helyzetben is alkalmazhatók. Éppen ezért a Python tudásépítés lépésről lépésre című e-könyv „Kontextuskezelők” fejezete szándékosan nem fájlművelethez kötődő példákon keresztül vezeti be és tárgyalja a kontextuskezelők részleteit annak érdekében, hogy az olvasó elsődlegesen a koncepciót és a működési mechanizmust értse meg, amely birtokában utána már többféle probléma megoldására vetheti be ezt az érdekes és hasznos nyelvi szerkezetet.

Ebben a bejegyzésben most egy olyan példát mutatunk, amely a könyvben nem szerepel, hogy lássunk még egy, nem fájlműveleti alkalmazást. Az alábbi programsorokban futási idő mérésére szolgáló objektumokat hoztunk létre kontextuskezelőkkel, kétféle megvalósításban. Az egyik esetben egy osztályt definiáltunk, a másik esetben egy generátorfüggvényt dekoráltunk a szabványos könyvtár contextlib moduljában szereplő contextmanager függvénnyel. A tényleges időmérést a time modul perf_counter() függvényével hajtjuk végre.

A tesztelésnél mindkét időmérést végző kontextuskezelőt egy with utasítással használjuk, és a mérendő késleltetést a time modul sleep() függvényével állítjuk be.  A két tesztkód közül az egyikben félidőben szándékosan egy kivételt keltünk, azért, hogy lássuk a kontextuskezelő helyes működését, vagyis azt, hogy ilyenkor is rendben lefut a mérés, és megkapjuk az kivételdobásig eltelt futási időt.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.