Python 3.7

_thread - निम्न-स्तरीय थ्रेडिंग API




python

_thread - निम्न-स्तरीय थ्रेडिंग API

यह मॉड्यूल कई थ्रेड्स (जिसे लाइट-वेट प्रोसेस या कार्य भी कहा जाता है ) के साथ काम करने के लिए निम्न स्तर की आदिमता प्रदान करता है - नियंत्रण के कई थ्रेड्स अपने वैश्विक डेटा स्पेस को साझा करते हैं। तुल्यकालन के लिए, साधारण ताले (जिसे म्यूटेक्स या बाइनरी सेमाफोर भी कहा जाता है) प्रदान किए जाते हैं। threading मॉड्यूल इस माड्यूल के शीर्ष पर निर्मित उच्च स्तरीय थ्रेडिंग एपीआई का उपयोग करना आसान बनाता है।

संस्करण 3.7 में परिवर्तित: यह मॉड्यूल वैकल्पिक हुआ करता था, यह अब हमेशा उपलब्ध है।

यह मॉड्यूल निम्नलिखित स्थिरांक और कार्यों को परिभाषित करता है:

exception _thread.error

थ्रेड-विशिष्ट त्रुटियों पर उठाया गया।

संस्करण 3.3 में बदला: यह अब बिल्ट-इन RuntimeError का एक पर्याय है।

_thread.LockType

यह लॉक ऑब्जेक्ट का प्रकार है।

_thread.start_new_thread(function, args[, kwargs])

एक नया सूत्र शुरू करें और अपना पहचानकर्ता लौटाएं। थ्रेड फ़ंक्शन फ़ंक्शन को तर्क सूची आर्ग (जिसे टपल होना चाहिए) के साथ निष्पादित करता है। वैकल्पिक kwargs तर्क कीवर्ड तर्क का एक शब्दकोश निर्दिष्ट करता है। जब फ़ंक्शन वापस आता है, तो थ्रेड चुपचाप बाहर निकलता है। जब फ़ंक्शन अनहेल्ड अपवाद के साथ समाप्त हो जाता है, तो एक स्टैक ट्रेस मुद्रित होता है और फिर थ्रेड बाहर निकलता है (लेकिन अन्य थ्रेड चलना जारी है)।

_thread.interrupt_main()

मुख्य थ्रेड में एक KeyboardInterrupt अपवाद उठाएँ। एक थ्रेड मुख्य फ़ंक्शन को बाधित करने के लिए इस फ़ंक्शन का उपयोग कर सकता है।

_thread.exit()

SystemExit अपवाद उठाएँ। जब पकड़ा नहीं जाता है, तो यह थ्रेड चुपचाप बाहर निकलने का कारण होगा।

_thread.allocate_lock()

एक नया लॉक ऑब्जेक्ट वापस करें। ताले के तरीके नीचे वर्णित हैं। शुरू में ताला खोल दिया जाता है।

_thread.get_ident()

वर्तमान थ्रेड का 'थ्रेड आइडेंटिफायर' लौटाएं। यह एक नॉनजरो पूर्णांक है। इसके मूल्य का कोई सीधा अर्थ नहीं है; यह एक जादू कुकी के रूप में इस्तेमाल किया जा सकता है जिसका उपयोग थ्रेड-विशिष्ट डेटा के शब्दकोश को अनुक्रमणित करने के लिए किया जाता है। थ्रेड आइडेंटिफ़ायर को रिसाइकिल किया जा सकता है जब एक थ्रेड बाहर निकलता है और एक और थ्रेड बनता है।

_thread.stack_size([size])

नए थ्रेड बनाते समय उपयोग किए गए थ्रेड स्टैक आकार वापस करें। वैकल्पिक आकार का तर्क बाद में बनाए गए थ्रेड्स के लिए उपयोग किए जाने वाले स्टैक आकार को निर्दिष्ट करता है, और 0 होना चाहिए (प्लेटफ़ॉर्म या कॉन्फ़िगर किया गया डिफ़ॉल्ट) या कम से कम 32,768 (32 KiB) का सकारात्मक पूर्णांक मान। यदि आकार निर्दिष्ट नहीं है, तो 0 का उपयोग किया जाता है। यदि थ्रेड स्टैक का आकार बदलना असमर्थित है, तो RuntimeError उठाया जाता है। यदि निर्दिष्ट स्टैक आकार अमान्य है, तो एक ValueError उठाया जाता है और स्टैक आकार अनमॉडिफाइड है। 32 KiB वर्तमान में इंटरप्रेटर के लिए पर्याप्त स्टैक स्पेस की गारंटी के लिए न्यूनतम समर्थित स्टैक आकार मान है। ध्यान दें कि कुछ प्लेटफार्मों में स्टैक आकार के लिए मानों पर विशेष प्रतिबंध हो सकता है, जैसे कि न्यूनतम स्टैक आकार की आवश्यकता> 32 KiB या सिस्टम मेमोरी पेज आकार के गुणकों में आवंटन की आवश्यकता होती है - अधिक जानकारी के लिए प्लेटफ़ॉर्म प्रलेखन को संदर्भित किया जाना चाहिए (4 KiB पृष्ठ) आम हैं, स्टैक के आकार के लिए 4096 के गुणकों का उपयोग करना (अधिक विशिष्ट जानकारी के अभाव में सुझाया गया दृष्टिकोण)। उपलब्धता: विंडोज, पॉसिक्स थ्रेड्स के साथ सिस्टम।

_thread.TIMEOUT_MAX

Lock.acquire() के टाइमआउट पैरामीटर के लिए अनुमत अधिकतम मान। इस मान से अधिक समयावधि निर्दिष्ट करने से OverflowError हो जाएगा।

संस्करण 3.2 में नया।

लॉक ऑब्जेक्ट्स में निम्न विधियाँ हैं:

lock.acquire(waitflag=1, timeout=-1)

किसी भी वैकल्पिक तर्क के बिना, यह विधि बिना शर्त लॉक को अधिग्रहित कर लेती है, यदि आवश्यक प्रतीक्षा तब तक होती है जब तक कि यह दूसरे धागे द्वारा जारी न हो जाए (एक समय में केवल एक धागा लॉक प्राप्त कर सकता है - यही उनके अस्तित्व का कारण है)।

यदि पूर्णांक वफ़लैग तर्क मौजूद है, तो कार्रवाई उसके मूल्य पर निर्भर करती है: यदि यह शून्य है, तो लॉक केवल तभी अधिग्रहित किया जाता है यदि इसे प्रतीक्षा किए बिना तुरंत अधिग्रहीत किया जा सकता है, जबकि यदि यह नॉनजेरो है, तो लॉक बिना शर्त के रूप में ऊपर प्राप्त किया गया है।

यदि फ़्लोटिंग-पॉइंट टाइमआउट तर्क मौजूद और सकारात्मक है, तो यह लौटने से पहले सेकंड में अधिकतम प्रतीक्षा समय निर्दिष्ट करता है। एक नकारात्मक टाइमआउट तर्क एक बिना रुके प्रतीक्षा को निर्दिष्ट करता है। यदि वेटफ़्लैग शून्य है तो आप एक समय-सीमा निर्दिष्ट नहीं कर सकते।

रिटर्न वैल्यू True यदि लॉक सफलतापूर्वक प्राप्त किया गया है, तो False यदि नहीं।

3.2 संस्करण में बदला: टाइमआउट पैरामीटर नया है।

3.2 संस्करण में बदला: ताला परिचित अब POSIX पर संकेतों द्वारा बाधित किया जा सकता है।

lock.release()

ताला जारी करता है। लॉक को पहले अधिग्रहित किया जाना चाहिए, लेकिन जरूरी नहीं कि उसी धागे से।

lock.locked()

लॉक की स्थिति लौटाएं: अगर यह किसी धागे द्वारा अधिग्रहित किया गया है तो True , यदि नहीं तो False

इन विधियों के अतिरिक्त, लॉक ऑब्जेक्ट का उपयोग स्टेटमेंट के माध्यम से भी किया जा सकता है, जैसे:

import _thread

a_lock = _thread.allocate_lock()

with a_lock:
    print("a_lock is locked while this executes")

चेतावनियां:

  • थ्रेड इंटरट्रैट्स के साथ अजीब तरीके से बातचीत करते हैं: KeyboardInterrupt अपवाद एक मनमाने धागे द्वारा प्राप्त किया जाएगा। (जब signal मॉड्यूल उपलब्ध हो, तो व्यवधान हमेशा मुख्य धागे पर जाता है।)
  • _thread.exit() को कॉल करना या SystemExit अपवाद _thread.exit() को कॉल करने के बराबर है।
  • लॉक पर acquire() विधि को बाधित करना संभव नहीं है - लॉक acquire() होने के बाद KeyboardInterrupt अपवाद अपवाद होगा।
  • जब मुख्य धागा बाहर निकलता है, तो यह सिस्टम परिभाषित होता है कि क्या अन्य धागे जीवित रहते हैं। अधिकांश प्रणालियों पर, वे try किए बिना ही मारे जाते हैं ... finally वस्तु को नष्ट finally हैं या निष्पादित कर देते हैं।
  • जब मुख्य धागा बाहर निकलता है, तो यह अपना कोई भी सामान्य क्लीनअप नहीं करता है (उस try को छोड़कर ... finally क्लॉस सम्मानित किया जाता है), और मानक I / O फाइलें फ्लश नहीं होती हैं।