我需要创建一个函数来检查以确保Mongo服务器正在使用ping函数运行。我在那里设置了客户端(配置文件包含带端口号的字典)
clientList = []
for value in configuration["mongodbServer"]:
client = motor.motor_tornado.MotorClient('mongodb://localhost:{}'.format(value))
clientList.append(client)
然后我运行此功能:
class MongoChecker(Checker):
formatter = 'stashboard.formatters.MongoFormatter'
def check(self):
for x in clientList:
if x.ping:
return x.ping
我得到的错误:
yielded unknown object MotorDatabase(Database(MongoClient([]), 'ping'))\n",
我认为我的问题是我使用ping函数错了。我找不到关于该功能的任何其他文档或任何其他类型的功能,以检查服务器是否仍在运行。如果有人知道使用Motor监控状态的更好方法,我会打开。谢谢!
答案 0 :(得分:2)
首先,没有“ping”功能。因此,MotorClient认为您正在尝试访问名为“ping”的数据库。名为“ping”的数据库显示在“未知对象”异常中。对于所有MongoDB命令,例如“ping”,只需使用MotorDatabase的command method。
其次,Motor是异步的。您必须使用“yield”语句在Tornado协程中使用Motor方法。例如:
@gen.coroutine
def check():
try:
result = yield client.admin.command({'ping': 1})
print(result)
except ConnectionFailure as exc:
print(exc)
如果你想同步测试它,你可以运行IOLoop足够长的时间来完成协程:
from pymongo.errors import ConnectionFailure
from tornado import gen
from tornado.ioloop import IOLoop
import motor.motor_tornado
client = motor.motor_tornado.MotorClient()
IOLoop.current().run_sync(check)
有关Tornado协同程序的介绍,请参阅Refactoring Tornado Coroutines和Tornado documentation。