पायथन के मल्टीप्रोसेसिंग पूल के साथ काम करते समय, कीबोर्डइंटरप्ट घटनाओं को संभालना हमेशा आसान नहीं होता है। इस लेख में, हम पता लगाएंगे कि इस तरह की रुकावटों को कैसे संभाला जाए और यह सुनिश्चित किया जाए कि प्रक्रियाएं शालीनता से बाहर निकलें।
प्रदान किया गया कोड नमूना चुनौती को प्रदर्शित करता है। कीबोर्डइंटरप्ट के लिए कैच ब्लॉक होने के बावजूद, कंट्रोल-सी दबाने पर यह निष्पादित नहीं होता है। इसके बजाय, प्रोग्राम तब तक लटका रहता है जब तक कि इसे बाहरी रूप से समाप्त नहीं कर दिया जाता।
इस समस्या की जड़ थ्रेडिंग.कंडीशन.वेट() में एक शर्त पर ब्लॉक करने से संबंधित पायथन बग में है। इस संदर्भ में, कीबोर्डइंटरप्ट कभी नहीं भेजा जाता है। परिणामस्वरूप, यह व्यवधान को पूल के भीतर नियंत्रित होने से रोकता है।
इस समस्या का एक समाधान परिणामों की प्रतीक्षा करते समय एक टाइमआउट निर्दिष्ट करना है। टाइमआउट पैरामीटर के साथ मैप_एसिंक () विधि का उपयोग मैप () के बजाय किया जा सकता है। यह दृष्टिकोण कीबोर्डइंटरप्ट को पहचानने और संसाधित करने की अनुमति देता है:
results = pool.map_async(slowly_square, range(40)).get(9999999)
एक बड़ा टाइमआउट मान सेट करके , हम अनिवार्य रूप से पूल को उपयोगकर्ता द्वारा बाधित होने तक परिणामों की प्रतीक्षा जारी रखने के लिए कहते हैं।
यह ध्यान रखना महत्वपूर्ण है कि इस समाधान की कुछ सीमाएँ हैं। यदि सभी कार्य पूर्ण होने से पहले समय समाप्त हो जाता है, तो अपूर्ण परिणाम हटा दिए जाएंगे। इसलिए, एक उचित टाइमआउट मान चुनना महत्वपूर्ण है जो अपूर्ण परिणामों के जोखिम के साथ प्रतिक्रियाशीलता को संतुलित करता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3