के अंदर मैं कुछ कार्यों कि सहभागी अजगर मॉड्यूल __import__
आयात एक अजगर धागा
का उपयोग कर पायथन में एक लॉक विशेष रूप से आयात के लिए लोड मैं हाल ही में एक "आयात लॉक" के बारे में कुछ लेख पर ठोकर खाई, कि है, है (न सिर्फ जीआईएल)। लेकिन लेख पुराना था इसलिए शायद यह सच नहीं है।
इससे मुझे धागे में आयात करने की प्रैक्टिस के बारे में आश्चर्य होता है।
import
/__import__
धागा सुरक्षित हैं?- क्या वे मृत ताले बना सकते हैं?
- क्या वे थ्रेडेड एप्लिकेशन में प्रदर्शन समस्याओं का कारण बन सकते हैं?
संपादित 12 Sept 2012
महान जबाब Soravux के लिए धन्यवाद। तो आयात थ्रेड सुरक्षित है, और मैं डेडलॉक्स के बारे में चिंता नहीं कर रहा हूं, क्योंकि मेरे कोड में __import__
का उपयोग करने वाले फ़ंक्शन एक-दूसरे को कॉल नहीं करते हैं।
क्या आपको पता है कि लॉक अधिग्रहण किया गया है भले ही मॉड्यूल पहले ही आयात हो चुका है? यदि ऐसा है, तो मुझे शायद यह देखने के लिए sys.modules में देखना चाहिए कि मॉड्यूल को पहले से ही __import__
पर कॉल करने से पहले आयात किया गया है या नहीं।
निश्चित रूप से यह सीपीथॉन में बहुत अंतर नहीं लेना चाहिए क्योंकि जीआईएल वैसे भी है। हालांकि यह अन्य कार्यान्वयन जैसे ज्योथन या स्टैकलेस पायथन पर बहुत अंतर डाल सकता है।
http://www.jython.org/jythonbook/en/1.0/Concurrency.html#module-import-lock
अजगर करता है, लेकिन, एक मॉड्यूल आयात ताला, जो द्वारा कार्यान्वित है परिभाषित:
संपादित 19 Sept 2012
Jython के बारे में, यहाँ वे दस्तावेज़ में क्या कहना है Jython। जब भी नाम का आयात किया जाता है तो यह लॉक अधिग्रहण किया जाता है। यह सच है कि आयात आयात कथन, समकक्ष
__import__
अंतर्निहित, या संबंधित कोड के माध्यम से जाता है। यह ध्यान देने योग्य है कि यदि संबंधित मॉड्यूल पहले से ही आयात किया गया है, तो मॉड्यूल आयात लॉक अभी भी अधिग्रहित किया जाएगा, अगर केवल संक्षेप में।
तो ऐसा लगता है कि लॉक प्राप्त करने से बचने के लिए आयात करने से पहले sys.modules में जांच करना समझदारी होगी। तुम क्या सोचते हो?
मैं कल्पना करता हूं कि उन्हें थ्रेड सुरक्षित होना चाहिए, क्योंकि आप कहते हैं, आयात पर दुभाषिया ब्लॉक। मुझे यह जानने में दिलचस्पी होगी कि क्या वे ठेठ गैर-थ्रेडेड सर्कुलर आयात के अलावा किसी भी तरह से डेडलॉक्स का कारण बन सकते हैं। –