由于某种原因,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)