0

由于某种原因,ReplicaSet 的监视器在计划刷新时出现死机。

我在对 find_one() 的调用中跟踪了 Traceback:

  File "pymongo/collection.py", line 604, in find_one
    for result in self.find(spec_or_id, *args, **kwargs).limit(-1):
  File "pymongo/cursor.py", line 904, in next
    if len(self.__data) or self._refresh():
  File "pymongo/cursor.py", line 848, in _refresh
    self.__uuid_subtype))
  File "pymongo/cursor.py", line 805, in __send_message
    client.disconnect()
  File "pymongo/mongo_replica_set_client.py", line 1255, in disconnect
    self.__schedule_refresh()
  File "pymongo/mongo_replica_set_client.py", line 1067, in __schedule_refresh
    self.__monitor.schedule_refresh()
  File "pymongo/mongo_replica_set_client.py", line 295, in schedule_refresh
    "Monitor thread is dead: Perhaps started before a fork?")

我研究了一下代码,发现 Monitor.monitor() 包含:

  # RSC has been collected or there
  # was an unexpected error.
  except:
      break

这意味着无论发生了什么坏事,我永远不会知道是什么。

那么,如果我发现 InvalidOperation("Monitor thread is dead: 也许在 fork 之前开始?"),我该怎么办?

有什么好方法可以重启 Monitor 实例吗?

(我在 pymongo.version 2.6.2 中使用 flask-pymongo)

4

1 回答 1

2

我不确定您的问题的确切原因,但这听起来像是我在 PyMongo 2.7 中修复的错误,发出 PYTHON-549,“重新创建监视器”。请升级。

于 2014-05-30T13:18:40.107 回答