जीवनचक्र
te एप्लिकेशन प्रसंस्करण कोड के लिए एक जीवनचक्र हैंडलर को पंजीकृत कर सकते हैं जिसे एप्लिकेशन शुरू होने से पहले या एप्लिकेशन बंद होने पर चलाने की आवश्यकता होती है।
आयात करें
te.से आयात
@ lib.asyncप्रबंधक
Ac def जीवनकाल (app):
कुछ _ async _ संसाधन () के साथ एसिंक:
प्रिंट करें ("Run at startup!")
उपज
प्रिंट करें ("Run on shutdown!")
मार्ग = [
...
]
ऐप = स्टारलेट (मार्ग = मार्ग, जीवनकाल = जीवनकाल)
जीवनचक्र चलने तक te किसी भी आने वाले अनुरोधों को संसाधित करना शुरू नहीं करेगा।
एक बार जब सभी कनेक्शन बंद हो जाते हैं और कोई भी चल रहा पृष्ठभूमि कार्य पूरा हो जाता है, तो रन लाइफ असंतुष्ट हो जाती है।
उपयोग करने पर विचार करें anyio.create_task_group() अतुल्यकालिक कार्यों का प्रबंधन करने के लिए।
लाइफटाइम स्टेट
लाइफस्पैन है state इसकी अवधारणा एक शब्दकोश है जिसका उपयोग जीवन और अनुरोधों के बीच वस्तुओं को साझा करने के लिए किया जा सकता है।
आयात करें
टाइपिंग आयात से AsyncIterator, t
आयात htpx
te.से आयात
स्टारलेट से। अनुरोध आयात अनुरोध
से te.आयात T
स्टारलेट से। रूटिंग आयात मार्ग
क्लास स्टेट (TypedDict):
http://client: htpx। Acent
@ lib.asyncप्रबंधक
Ac def जीवनकाल (app: Starlette) - > AcIter[राज्य]:
htpx के साथ Async। ग्राहक के रूप में Asc()
उपज {"http_client": client}
Ac def होमपेज (request: Request) - > प्लेनटेक्स्टरिस्पांस:
ग्राहक = request.state.http_client
प्रतिक्रिया = ग्राहक का इंतजार करें ("https://www.example.com")
प्लेनटेक्स्ट रिस्पांस लौटाता है (response.text)
ऐप = स्टारलेट (
जीवनकाल = जीवनकाल,
मार्ग = [मार्ग ("/", homepage) ]
)
अनुरोध पर प्राप्त हुआ state आजीवन हैंडलर पर प्राप्त राज्य की एक उथली प्रति है।
परीक्षण के दौरान जीवन चलाना
आपको चाहिए TestClient कॉल दीर्घायु सुनिश्चित करने के लिए एक संदर्भ प्रबंधक के रूप में कार्य करता है।
उदाहरण आयात ऐप से
से te.आयात Testent
डेफ टेस्ट_होमपेज ():
ग्राहक के रूप में Testent (ऐप) के साथ:
# एप्लिकेशन के जीवनकाल को ब्लॉक में प्रवेश करने पर कहा जाता है।
प्रतिक्रिया = ग्राहक ("/")
प्रतिक्रिया दें। status_code == 200
# और ब्लॉक से बाहर निकलने पर जीवनकाल का अश्रु चल रहा है।