मुझे एक कतार की आवश्यकता है जिसमें कई धागे सामान डाल सकते हैं, और कई धागे से पढ़ सकते हैं।
पायथन में कम से कम दो कतार कक्षाएं, क्यू.क्यू.क्यू और संग्रह हैं। विशेष रूप से पूर्ववर्ती आंतरिक रूप से उपयोग करने के साथ। दोनों दस्तावेज़ में थ्रेड-सुरक्षित होने का दावा करते हैं।
हालाँकि, कतार डॉक्स भी बताती हैं:
collection.deque तेजी से परमाणु परिशिष्ट () और पॉपलेफ्ट () संचालन के साथ अनबाउंड कतारों का एक वैकल्पिक कार्यान्वयन है जिसमें लॉकिंग की आवश्यकता नहीं होती है।
जो मुझे लगता है कि मैं बिल्कुल समझ में नहीं आता है: क्या इसका मतलब यह है कि deque पूरी तरह से धागा-सुरक्षित नहीं है?
यदि यह है, तो मैं दो वर्गों के बीच के अंतर को पूरी तरह से नहीं समझ सकता। मैं देख सकता हूं कि क्यू ब्लॉकिंग कार्यक्षमता जोड़ता है। दूसरी ओर, यह इन-ऑपरेटर के लिए समर्थन जैसी कुछ ख़राब सुविधाएँ खो देता है।
आंतरिक deque ऑब्जेक्ट को सीधे एक्सेस करना, है
x कतार में ()। deque
सुरक्षित धागा?
इसके अलावा, क्यू क्यू ऑपरेशन के लिए एक म्यूटेक्स को नियोजित करता है, जब पहले से ही थ्रेड सुरक्षित है?
dequeउसी थ्रेड में भी पुनरावृत्ति करते हुए यह त्रुटि प्राप्त कर सकते हैं । एकमात्र कारण Queueजिससे आप यह त्रुटि नहीं प्राप्त कर सकते हैं वह यह है कि Queueपुनरावृत्ति का समर्थन नहीं करता है।
RuntimeError: deque mutated during iterationक्या तुम हो सकता हैdequeकई धागे और कोई ताला के बीच एक साझा का उपयोग कर रहा है ...