टाइमआउट के साथ लंबे समय से चल रहे फ़ंक्शन कॉल को रद्द करना
जटिल स्क्रिप्ट निष्पादित करते समय जिसमें संभावित रूप से रुकने वाले फ़ंक्शन शामिल होते हैं, एक रास्ता प्रदान करना वांछनीय है यदि ये फ़ंक्शन निर्दिष्ट निष्पादन समय से अधिक हो जाते हैं तो उन्हें समाप्त कर दें। यह सुनिश्चित करता है कि स्क्रिप्ट अनुत्तरदायी न हो जाए या अनिश्चित काल तक अटकी न रहे।
पायथन में, सिग्नल पैकेज (यूनिक्स सिस्टम पर उपलब्ध) का लाभ उठाकर इस समस्या का समाधान प्रदान किया जाता है। सिग्नल हैंडलर को पंजीकृत करके, आप फ़ंक्शन कॉल के लिए टाइमआउट सेट कर सकते हैं। यदि फ़ंक्शन निर्दिष्ट समय से अधिक समय लेता है, तो हैंडलर को लागू किया जाता है, जिससे आप स्थिति को उचित रूप से संभाल सकते हैं।
निम्न कोड स्निपेट पर विचार करें:
import signal # Register a signal handler for the timeout def handler(signum, frame): print("Forever is over!") raise Exception("end of time") # Define a function that may run for an indetermined time def loop_forever(): import time while 1: print("sec") time.sleep(1) # Register the signal function handler signal.signal(signal.SIGALRM, handler) # Define a timeout for the function signal.alarm(10) try: loop_forever() except Exception as exc: print(exc) # Cancel the timer if the function returned before timeout signal.alarm(0)
इस उदाहरण में, हम टाइमआउट सिग्नल को संभालने के लिए हैंडलर फ़ंक्शन को पंजीकृत करते हैं। फिर हम अपने लंबे समय तक चलने वाले लूप_फॉरएवर फ़ंक्शन को परिभाषित करते हैं, जो लगातार हर सेकंड "सेकेंड" संदेश प्रिंट करता है।
signal.alarm(10) का उपयोग करके 10-सेकंड का टाइमआउट सेट करने के बाद, हम लूप_फॉरएवर को निष्पादित करने का प्रयास करते हैं। यदि फ़ंक्शन को निष्पादित होने में 10 सेकंड से अधिक समय लगता है, तो हमारा सिग्नल हैंडलर लागू हो जाता है और "हमेशा के लिए खत्म हो गया!" प्रिंट करता है। और एक अपवाद उठा रहा है।
टाइमआउट परिदृश्य का उचित प्रबंधन सुनिश्चित करने के लिए, यदि फ़ंक्शन निर्दिष्ट समय से पहले लौटता है तो टाइमर को रद्द करना आवश्यक है। हमारे उदाहरण में, अपवाद उठाए जाने पर टाइमर को रद्द करने के लिए हम सिग्नल.अलार्म(0) को कॉल करते हैं।
ध्यान दें कि सिग्नल पैकेज मल्टी-थ्रेडेड वातावरण के साथ अच्छी तरह से इंटरैक्ट नहीं कर सकता है। इसके अतिरिक्त, यदि कोई फ़ंक्शन टाइमआउट के दौरान उठाए गए अपवादों को पकड़ता है और अनदेखा करता है, तो टाइमआउट तंत्र प्रभावी नहीं हो सकता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3