इसके अलावा, धागे पंजीकृत नहीं कर सकता संकेत संचालकों
धागे को मारने के लिए
सिग्नल संभावित भयानक है, विशेष रूप से सी में, खासकर यदि आप धागे के हिस्से के रूप में स्मृति को आबंटित है, क्योंकि यह मुक्त नहीं किया जाएगा जब वह विशेष धागा मर जाता है (क्योंकि यह प्रक्रिया के ढेर से संबंधित है)। सी में कोई कचरा संग्रह नहीं है, इसलिए यदि वह सूचक स्कोप से बाहर हो जाता है, तो यह गुंजाइश से बाहर हो गया है, स्मृति आवंटित बनी हुई है। तो बस उस से सावधान रहें - केवल सी में ऐसा ही करें यदि आप वास्तव में सभी धागे को मारने जा रहे हैं और प्रक्रिया को समाप्त कर रहे हैं ताकि स्मृति को ओएस को वापस सौंप दिया जा सके - उदाहरण के लिए थ्रेडपूल से थ्रेड जोड़ना और निकालना आपको एक स्मृति रिसाव देगा।
समस्या यह है कि जब मैं इन बच्चों के धागे को बंद करना चाहता हूं तो वे सभी इनपुट पर अवरुद्ध हो रहे हैं।
काफी हद तक मैं हाल ही में एक ही चीज़ के साथ लड़ रहा हूं।समाधान सचमुच बिना किसी टाइमआउट के अवरुद्ध कॉल न करें। तो, उदाहरण के लिए, क्या आप आदर्श है चाहता हूँ:
def threadfunc(running):
while running:
blockingcall(timeout=1)
जहां चल नियंत्रित धागे से पारित हो जाता है - मैं सूत्रण उपयोग नहीं किया है, लेकिन मैं और बहु का इस्तेमाल किया है और इस के साथ आप वास्तव में एक Event()
वस्तु पारित करने के लिए की जरूरत है is_set()
देखें। लेकिन आपने डिजाइन पैटर्न के लिए कहा, यह मूल विचार है।
फिर, जब आप समाप्त करने के लिए इस सूत्र चाहते हैं, आप चलाएँ:
running.clear()
mythread.join()
और अपने मुख्य थ्रेड तो अपने ग्राहक धागा अपने आखिरी कॉल संभाल, और वापस जाने के लिए अनुमति चाहिए, और पूरे कार्यक्रम अच्छी तरह से ऊपर परतों ।
यदि आपके पास टाइमआउट के बिना अवरुद्ध कॉल है तो आप क्या करते हैं? एसिंक्रोनस विकल्प का उपयोग करें, और नींद (जैसा कि आपको किसी भी विधि को थ्रेड को निलंबित करने की आवश्यकता है, ताकि आप कताई नहीं कर रहे हों) यदि आपको आवश्यकता हो। इसके चारों ओर कोई और रास्ता नहीं है।
किस प्रकार के धागे? कुछ पुस्तकालय हैं जो थ्रेडिंग कार्यक्षमता प्रदान करते हैं। – Blender
दुर्भाग्यवश, कनेक्शन के लिए अलग (POSIX) धागे का उपयोग करते समय यह केवल हिमशैल की नोक है। इसके बजाए गैर-अवरुद्ध I/O का उपयोग करने पर विचार करें (उदाहरण के लिए, ट्विस्टेड का उपयोग करना।) –
थ्रेड को स्वयं को समाप्त करने की आवश्यकता है (या ऐसा करने के लिए कहा जाए)। क्या आप उन्हें अवरुद्ध नहीं कर सकते हैं, इसलिए अगर वे संकेत दिए गए तो वे बाहर निकल सकते हैं? (मतदान या जो कुछ भी) –