2011-01-27 22 views
5

que utilizo:Pymongo AssertionError: los identificadores no coinciden

  • MongoDB 1.6.5
  • Pymongo 1,9
  • Python 2.6.6

tengo 3 tipos de demonios. Primero cargue los datos de la web, 2 ° analícelos y guarde los resultados, y 3 ° resultado del grupo. Todos ellos trabajando con Mongodb. En algún momento tercera demonio de tiros muchas excepciones de este tipo (sobre todo cuando hay gran cantidad de datos en DB):

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 

Puede alguien decir qué causa esta excepcion y cómo solucionar este problema.

Gracias.

+0

[email protected] dijo que esto puede ayudar: http://jira.mongodb.org/browse/PYTHON-166 –

Respuesta

4

Esto es probablemente un problema de subprocesamiento relacionado con la forma en que está utilizando subprocesos de trabajo con coroutines gevent. Parece que el objeto de conexión pymongo está leyendo una respuesta para una solicitud que no realizó.

+0

Tiene la razón absoluta. Descubrí que algunas conexiones volvían al grupo antes de que el cursor finalizara la salida. –

+3

Entonces, ¿cuál es la solución para esto? Estoy teniendo el mismo problema y podría resolver cómo. – CIF

Cuestiones relacionadas