2011-01-27 7 views
5

मैं का उपयोग करें:Pymongo AssertionError: आईडी से मेल नहीं खाते

  • MongoDB 1.6.5
  • Pymongo 1.9
  • अजगर 2.6.6

मैं डेमॉन के 3 प्रकार हैं। वेब से पहला लोड डेटा, दूसरा इसका विश्लेषण करता है और परिणाम बचाता है, और तीसरा समूह परिणाम। वे सभी Mongodb के साथ काम कर रहे हैं। कुछ समय 3 डेमॉन पर इस तरह कई अपवाद फेंकता है (ज्यादातर जब वहाँ डीबी में डेटा की बड़ी मात्रा में कर रहे हैं):

Traceback (most recent call last): 
    File "/usr/local/lib/python2.6/dist-packages/gevent-0.13.1-py2.6-linux-x86_64.egg/gevent/greenlet.py", line 405, in run 
    result = self._run(*self.args, **self.kwargs) 
    File "/data/www/spider/daemon/scripts/mainconverter.py", line 72, in work 
    for item in res: 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/cursor.py", line 601, in next 
    if len(self.__data) or self._refresh(): 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/cursor.py", line 564, in _refresh 
    self.__query_spec(), self.__fields)) 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/cursor.py", line 521, in __send_message 
    **kwargs) 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/connection.py", line 743, in _send_message_with_response 
    return self.__send_and_receive(message, sock) 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/connection.py", line 724, in __send_and_receive 
    return self.__receive_message_on_socket(1, request_id, sock) 
    File "/usr/local/lib/python2.6/dist-packages/pymongo-1.9_-py2.6-linux-x86_64.egg/pymongo/connection.py", line 714, in __receive_message_on_socket 
    struct.unpack("<i", header[8:12])[0]) 
AssertionError: ids don't match -561338340 0 
<Greenlet at 0x2baa628: <bound method Worker.work of <scripts.mainconverter.Worker object at 0x2ba8450>>> failed with AssertionError 

किसी को क्या इस अपवाद कारण और कैसे इसे ठीक करने के बता सकते हैं।

धन्यवाद।

+0

[email protected] ने कहा कि इससे मदद मिल सकती है: http://jira.mongodb.org/browse/PYTHON-166 –

उत्तर

4

यह संभवतः एक थ्रेडिंग समस्या है जो आप gevent coroutines के साथ कार्यकर्ता धागे का उपयोग कर रहे हैं। ऐसा लगता है कि पिमोंगो कनेक्शन ऑब्जेक्ट एक अनुरोध के लिए प्रतिक्रिया पढ़ रहा है जो उसने नहीं किया था।

+0

आप बिल्कुल सही हैं। मैंने पाया कि कर्सर आउटपुट समाप्त होने से पहले कुछ कनेक्शन पूल में लौट आए। –

+3

तो, इसके लिए समाधान क्या है? मुझे एक ही समस्या है और मैं कैसे हल कर सकता हूं। – CIF