मुझे लगता है कि आप यहां सीपीथॉन का उपयोग कर रहे हैं।
परंतु कोई कस्टम __contains__
या __iter__
हुक वापस में निहित के खिलाफ मूल्यों आप परीक्षण अजगर या में छोड़ने सूची अजगर कोड में लागू कस्टम __eq__
हुक का उपयोग करें, in
ऑपरेटर पूरी तरह से सी में नियंत्रित किया जा सकता है, और सिर्फ एक ऑपोड है।
यह ऑपरेशन पूरी तरह से थ्रेड-सुरक्षित बनाता है; पाइथन थ्रेड केवल ऑपकोड के बीच स्विच करते हैं; जीआईएल (ग्लोबल दुभाषिया ताला) आमतौर पर केवल ऑपोड के बीच अनलॉक करता है।
यह कहा गया है कि, यदि आप एक कस्टम सी प्रकार पर in
का उपयोग करते हैं जो जीआईएल को अनलॉक करता है तो परीक्षण की रोकथाम थ्रेड-सुरक्षित नहीं होगी।
दूसरे शब्दों में: in
बाईटकोड परीक्षण बंद कर दिया जाता है, लेकिन ऑपरेटर अजगर कोड कॉल करने के लिए की जरूरत है (__contains__
के माध्यम से __iter__
साथ पुनरावृत्ति, कोई __contains__
कार्यान्वयन उपलब्ध है, या मूल्यों __eq__
अजगर में लागू हुक के खिलाफ परीक्षण कर रहे हैं जब) , तो ऑपरेशन थ्रेड सुरक्षित नहीं है।
अन्य पायथन कार्यान्वयन के लिए, थ्रेडिंग कैसे संभाला जाता है व्यापक रूप से भिन्न हो सकता है। निश्चित रूप से, ज्योथन और आयरनपीथन में कोई जीआईएल नहीं है, और आपको लगता है कि ऑपरेशन थ्रेड सुरक्षित नहीं है।
स्रोत
2013-11-01 13:37:21
ध्यान दें कि थ्रेड सुरक्षा के बारे में कोई भी विवरण कार्यान्वयन विशिष्ट है (और शायद संस्करण-विशिष्ट भी)। यह लॉक लेने और रिलीज़ करने के अलावा कुछ भी धागा सुरक्षित नहीं मानना संभव है। – delnan