2011-09-11 26 views
11

पायथन 3.2 ने new GIL implementation एंटोनी पिट्रो द्वारा प्रस्तुत किया जो sys.setswitchinterval फ़ंक्शन का खुलासा करता है।पायथन 3.2 में sys.setswitchinterval और

यह कब बदलना उपयोगी होगा, और क्यों?

sw_interval = sys.getswitchinterval() 
try: 
    # Setting the switch interval to a very big number to make sure that their will be no 
    # thread context switching while running the operations that came after. 
    sys.setswitchinterval(sys.maxint) 
    # Expressions run here will be atomic .... 
finally: 
    sys.setswitchinterval(sw_interval) 

एक और उपयोग के मामले अपने कोड खास तौर पर जब आप convoy effect (या किसी भी बढ़त का सामना कर रहे धुन पर होगा:

+0

कोई लेकर्स नहीं ?! 50 प्रतिनिधि एक बार जा रहे हैं ... –

उत्तर

4

एक प्रयोग उदाहरण के लिए, यह सुनिश्चित करें कि आपरेशन (रों) बनाने atomically चलाने के लिए किया जाएगा मामला जहां नया जीआईएल खराब प्रदर्शन देता है)। शायद (बस हो सकता है) संदर्भ स्विच अंतराल को बदलने से आपको और अधिक गति मिल सकती है।

अस्वीकरण: पहली विधि ऊपर sited अंधेरे जादू पर विचार है और यह पूरी तरह सिफारिश नहीं कर रहा है (threading.Lock -likes कि उपयोग के मामले में प्राथमिकता दी जाती है)। आम तौर पर मुझे नहीं लगता कि थ्रेड संदर्भ स्विच अंतराल को बदलना सामान्य परिस्थितियों में कुछ करना है। मैं समझाऊंगा कि टिम पीटर्स पहले से ही मेटाक्लास के बारे में क्या कहता है: changing thread context switch interval is deeper magic than 99% of people are going to need

+0

जब कोई एप्लिकेशन आईओ बाध्य होता है, तो क्या आप _increase_ या _decrease_ करेंगे? –

+2

@ मैट: असल में केवल आईओ बाउंड थ्रेड होने से कोई समस्या नहीं आती है क्योंकि हर बार एक थ्रेड एक आईओ बाध्य निर्देश निष्पादित करता है, यह जीआईएल को छोड़ देता है, लेकिन समस्या को देखा जा सकता है जब आईओ बाउंड थ्रेड का उपयोग सीपीयू थ्रेड के साथ किया जाता है जैसा कि इसमें बताया गया है समस्या (http://bugs.python.org/issue7946) इस तरह के मामले में (फिर से) शायद स्विच अंतराल को कम करने से बेहतर प्रदर्शन हो सकता है क्योंकि आईओ बाउंड थ्रेड को लंबे समय तक इंतजार नहीं करना पड़ेगा अगर उन्होंने ब्लॉक नहीं किया बिलकुल। इस विधि में 'अंधेरे' जादू को संदर्भित करने के लिए – mouad

+0

+1 –