Frage

Ich benutze:

  • MongoDB 1.6.5
  • Pymongo 1.9
  • Python 2.6.6

Ich habe 3 Arten von Daemons. 1. Lastdaten aus Web, 2. Analysieren Sie es und speichern Sie das Ergebnis und das Ergebnis der 3. Gruppe. Alle arbeiten mit MongoDB. Irgendwann wirft der 3rd -Daemon viele Ausnahmen wie diese aus (hauptsächlich, wenn eine große Datenmenge in DB vorhanden ist):

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

Kann jemand sagen, was diesen Auszug verursacht und wie dies behoben werden kann.

Vielen Dank.

War es hilfreich?

Lösung

Dies ist wahrscheinlich ein Threading -Problem, das darauf zusammenhängt, wie Sie Arbeitskräfte mit Gevent -Coroutinen verwenden. Es scheint, als würde das Pymongo -Verbindungsobjekt eine Antwort für eine Anfrage lesen, die es nicht gestellt hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top