Python Academy · पाठ

व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न

फ़ाइलों, लॉक, टाइमर और DB कनेक्शन पर कॉन्टेक्स्ट मैनेजर लागू करें।

पाठ 4, कुल 4 में से14 चरण

व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

परिचय

कॉन्टेक्स्ट मैनेजर फ़ाइलों, डेटाबेस, लॉक, टाइमर और अन्य संसाधनों से जुड़ी वास्तविक जीवन की प्रबंधन समस्याओं को सुंदर ढंग से हल करते हैं।

फ़ाइल संसाधन पाइपलाइन

इनपुट और आउटपुट फ़ाइलों को एक साथ खोलिए, पंक्ति-दर-पंक्ति प्रोसेस कीजिए और दोनों को अपने-आप बंद कीजिए।
import io
src = io.StringIO('line1\nline2\nline3')
dst = io.StringIO()
with src, dst:
    for line in src:
        dst.write(line.upper())
print(dst.getvalue())

डेटाबेस लेन-देन

डेटाबेस ऑपरेशन को एक CM में रखिए: सफलता पर कमिट कीजिए, अपवाद पर रोलबैक कीजिए और हमेशा बंद कीजिए।
from contextlib import contextmanager
@contextmanager
def db_transaction(conn):
    try:
        yield conn
        print('COMMIT')
    except Exception as e:
        print(f'ROLLBACK: {e}')
        raise
    finally:
        print('CLOSE')
with db_transaction({'execute': lambda q: print(f'SQL: {q}')}) as db:
    db['execute']('INSERT ...')

थ्रेडिंग लॉक

with lock: लॉक प्राप्त करता है, बॉडी चलाता है और बाहर निकलते समय लॉक छोड़ देता है — मैन्युअल रूप से लॉक प्राप्त करने या छोड़ने की आवश्यकता नहीं होती।
import threading
lock = threading.Lock()
shared = []
def add(x):
    with lock:
        shared.append(x)
add(1); add(2)
print(shared)

निर्देशिका बदलना

os.chdir() कार्यशील निर्देशिका को वैश्विक रूप से बदलता है। एक CM उसे सुरक्षित रखकर बाद में पुनर्स्थापित करता है।
from contextlib import contextmanager
import os
@contextmanager
def chdir(path):
    old = os.getcwd()
    os.chdir(path)
    try: yield
    finally: os.chdir(old)
original = os.getcwd()
with chdir('/tmp'):
    print('in tmp:', os.getcwd())
print('back:', os.getcwd())

अस्थायी फ़ाइलें

tempfile.NamedTemporaryFile को CM के रूप में उपयोग करने पर एक अस्थायी फ़ाइल अपने-आप बनती और हटती है।
import tempfile
with tempfile.NamedTemporaryFile(mode='w', suffix='.txt', delete=True) as f:
    f.write('temp data')
    print('temp file:', f.name)
print('deleted')

पर्यावरण चर में अस्थायी बदलाव

किसी test या subprocess के लिए env चर को अस्थायी रूप से सेट कीजिए, फिर उसे पहले के मान पर पुनर्स्थापित कीजिए।
from contextlib import contextmanager
import os
@contextmanager
def env(**kwargs):
    old = {k: os.environ.get(k) for k in kwargs}
    os.environ.update({k:str(v) for k,v in kwargs.items()})
    try: yield
    finally:
        for k,v in old.items():
            if v is None: os.environ.pop(k,None)
            else: os.environ[k]=v
with env(DEBUG='1', LOG_LEVEL='DEBUG'):
    print(os.environ['DEBUG'])

प्रोफ़ाइलिंग ब्लॉक

किसी ब्लॉक को CM के अंदर चलाकर उसके प्रदर्शन को मापने के लिए cProfile का उपयोग कीजिए।
from contextlib import contextmanager
import cProfile
@contextmanager
def profile():
    pr = cProfile.Profile()
    pr.enable()
    yield pr
    pr.disable()
with profile() as pr:
    sum(range(1000000))
print('profiled')

नेटवर्क सॉकेट

सॉकेट CM प्रोटोकॉल लागू करते हैं: with socket.socket() as s: बाहर निकलते समय सॉकेट बंद हो जाता है।
import socket
try:
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.settimeout(0.1)
        print('socket ready')
except Exception as e:
    print(f'socket: {e}')

चेतावनियाँ कैप्चर करना

warnings.catch_warnings() ब्लॉक के अंदर उत्पन्न चेतावनियों को कैप्चर करता है और tests में उपयोगी होता है।
import warnings
with warnings.catch_warnings(record=True) as w:
    warnings.simplefilter('always')
    warnings.warn('test warning')
print(len(w), w[0].category.__name__)

पैटर्न संयोजित करना

वास्तविक जीवन के CM अक्सर कई पैटर्न को जोड़ते हैं: एक ही पुनः उपयोग योग्य घटक में लेन-देन + logging + समय-मापन।
from contextlib import contextmanager
import time
@contextmanager
def timed_operation(name):
    print(f'[{name}] start')
    t0 = time.perf_counter()
    try:
        yield
        print(f'[{name}] done in {time.perf_counter()-t0:.4f}s')
    except Exception as e:
        print(f'[{name}] failed: {e}')
        raise
with timed_operation('loop'):
    sum(range(100000))

त्वरित जाँच

सुरक्षित समवर्ती पहुँच के लिए कौन-सा थ्रेडिंग प्रिमिटिव कॉन्टेक्स्ट मैनेजर प्रोटोकॉल लागू करता है?

पुनरावलोकन

कॉन्टेक्स्ट मैनेजर पैटर्न: फ़ाइल पाइपलाइन, डेटाबेस लेन-देन, लॉक, निर्देशिका बदलाव, अस्थायी फ़ाइलें, पर्यावरण पैच और प्रोफ़ाइलिंग। गतिशील संसाधन स्टैक के लिए ExitStack।

आगे बढ़ते रहिए

बहुत अच्छा कार्य! अगला पाठ आपकी प्रतीक्षा कर रहा है।
शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
76
पाठ
320

अक्सर पूछे जाने वाले प्रश्न

क्या “व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न” पाठ निःशुल्क है?

हाँ—“व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न” में मैं क्या सीखूँगा?

फ़ाइलों, लॉक, टाइमर और DB कनेक्शन पर कॉन्टेक्स्ट मैनेजर लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. with कथन का गहन अध्ययन
  2. __enter__ और __exit__ प्रोटोकॉल
  3. contextlib: @contextmanager
  4. व्यावहारिक कॉन्टेक्स्ट मैनेजर पैटर्न
← Python Academy पर वापस जाएँ