2009-08-18 9 views
8

मेरे पास एक कतार है (Queue मॉड्यूल से), और मैं इसमें अनुक्रमित पहुंच प्राप्त करना चाहता हूं। (यानी, कतार में आइटम नंबर चार के लिए पूछने में सक्षम होने के कारण, कतार से इसे हटाए बिना।पायथन कतार में अनुक्रमित पहुंच प्राप्त करने का सबसे अच्छा तरीका, थ्रेड-सुरक्षित

मैंने देखा कि एक कतार आंतरिक रूप से एक डेक का उपयोग करती है, और डेक ने अनुक्रमित किया है। सवाल यह है कि, मैं कतार को गड़बड़ कर (1) बिना धागे-सुरक्षा को तोड़ने के बिना डेक का उपयोग कैसे कर सकता हूं।

+1

आप कतार का उपयोग क्यों कर रहे हैं और चीजों को अनुक्रमित नहीं कर रहे हैं? क्या यह धागे के बीच एक साझा वस्तु है? –

+0

मुझे यकीन नहीं है कि "अनुक्रमिक रूप से चीजों को enquuing और dequeueing" से आपका क्या मतलब है। मैं आपका दूसरा प्रश्न भी समझ नहीं पा रहा हूं: हां, कतार धागे के बीच साझा की जाती है। –

+1

कतार की चीजें क्रमबद्ध हैं और क्रम में खींची गई हैं। "क्रम में" का विचार यह है कि उन्हें एक छोर में जोड़ने और दूसरे छोर से पॉप के अलावा शायद ही कभी पहुंचाया जाता है। आप "कतार" के आसपास इस डिफ़ॉल्ट धारणा को क्यों तोड़ रहे हैं? –

उत्तर

10
import Queue 

class IndexableQueue(Queue): 
    def __getitem__(self, index): 
    with self.mutex: 
     return self.queue[index] 

यह पाठ्यक्रम म्युटेक्स जारी करने के लिए अनुक्रमण सफल होता है या एक IndexError को जन्म देती है कि क्या महत्वपूर्ण की है, और मैं उस के लिए एक with कथन का उपयोग कर रहा हूँ। पुराने पायथन संस्करणों में, try/finally का उपयोग उसी प्रभाव के लिए किया जाएगा।

+1

तो साफ करें ... मैं अब जावा में थ्रेड के साथ गड़बड़ कर रहा हूं, और यह है वह मजेदार नहीं है। –

+0

महान जवाब। दुर्भाग्यवश, यह कहीं भी दस्तावेज नहीं है कि कतार उपयुक्त है (और यहां तक ​​कि जैसा कि आप कहते हैं), अपने आंतरिक सदस्यों तक पहुंच के साथ उप-वर्गीकृत किया जाना है। उनका "सार्वजनिक" एकमात्र सुराग है। Queue.py मॉड्यूल के स्रोत कोड में भी यह स्पष्ट रूप से यह नहीं कहता है, और यह एक शर्म की बात है। इस उत्तर में कोड का आपका स्निपेट क्यूई, आईएमएचओ –

+0

@ एलीबेन के मानक lib दस्तावेज़ीकरण में एक उदाहरण होना चाहिए, आप सही हैं कि Queue.py के आंतरिक के दस्तावेज़ (और लंबे समय से) अक्षम रूप से अक्षम हैं, लेकिन कम से कम यह है थोड़ा बेहतर हो रहा है ... उदाहरण के लिए उस समय हमने अपनी उप-वर्गीकरण (कुकबुक के दूसरे संस्करण में नुस्खा 9.3) दस्तावेज किया था जो कि दस्तावेज़ों में नहीं था, अब कम से कम कुछ उपयोगी उप-वर्गों की आपूर्ति की जाती है ... ;-)। –

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

  • कोई संबंधित समस्या नहीं^_^