2009-10-18 14 views
8

मैं अक्सर लोगों को यह कहते हुए देखता हूं कि जीआईएल प्रति पायथन इंटरप्रेटर (यहां तक ​​कि यहां स्टैक ओवरफ्लो पर भी है)।क्या पाइथन जीआईएल वास्तव में प्रति दुभाषिया है?

लेकिन मुझे स्रोत कोड में जो दिखाई देता है, ऐसा लगता है कि जीआईएल एक वैश्विक चर है और इसलिए प्रत्येक पायथन प्रक्रिया में सभी दुभाषियों के लिए एक जीआईएल है। मुझे पता है कि उन्होंने ऐसा इसलिए किया क्योंकि लुआ या टीसीएल की तरह चारों ओर पारित कोई दुभाषिया वस्तु नहीं है, यह शुरुआत में अच्छी तरह से डिजाइन नहीं किया गया था। और थ्रेड स्थानीय भंडारण पाइथन लोगों के उपयोग के लिए पोर्टेबल नहीं लगता है।

क्या यह सही है? मैं यहां एक परियोजना में 2.4 संस्करण का उपयोग कर रहा हूं।

क्या यह बाद के संस्करणों में बदल गया था, खासकर 3.0 में?

उत्तर

7

जीआईएल वास्तव में प्रति-प्रक्रिया है, प्रति-दुभाषिया नहीं। यह 3.x में अपरिवर्तित है।

0

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

[Py ___ Initialize()] नो-सेशन जब दूसरी बार कहा जाता है (Py_Finalize बुला बिना() पहले)। कोई वापसी मूल्य नहीं है; प्रारंभिकता विफल होने पर यह एक घातक त्रुटि है।

आपको Unladen Swallow प्रोजेक्ट में रुचि हो सकती है, जिसका उद्देश्य अंततः जीआईएल को पूरी तरह से सीपीथॉन से निकालना है। अन्य पायथन रनटाइम में जीआईएल नहीं है, जैसे (मुझे विश्वास है) Stackless Python, और निश्चित रूप से Jython

यह भी ध्यान दें कि जीआईएल still present in CPython 3.x है।

+1

कई परियोजनाओं ने पहले सीपीआईथन से जीआईएल को हटा दिया है। Unladen निगल पहला नहीं है। हालांकि उन्होंने जीआईएल संस्करण के साथ-साथ प्रदर्शन नहीं किया, इसलिए कोई भी उनका उपयोग नहीं करता है। – nosklo

+1

इसके अलावा, बेकार जीआईएल को नहीं हटाता है। वास्तव में, किसी भी स्टैकलेस माइक्रोथ्रेड में किसी भी अवरुद्ध ऑपरेशन पूरे एप्लिकेशन को अवरुद्ध कर देगा। – nosklo

+0

और ज्योथन इतनी धीमी है कि यह भी अनुपयोगी है - जब तक कि आप इसे जावा प्रोग्राम में स्क्रिप्टिंग प्लगइन के लिए उपयोग न करें, जहां अधिकांश काम पायथन में किया जाता है। – Lothar

2

शायद भ्रम के बारे में आता है क्योंकि ज्यादातर लोग मानते हैं कि पाइथन प्रति प्रक्रिया एक दुभाषिया है। मुझे याद है कि सी एपीआई के माध्यम से एकाधिक दुभाषियों के लिए समर्थन काफी हद तक अवांछित था और शायद ही कभी इस्तेमाल किया गया था। (और जब मैंने इसे जाने दिया, ठीक से काम नहीं किया।)

संबंधित मुद्दे