1

我需要创建一个函数来检查以确保 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 监控状态的更好方法,我愿意。谢谢!

4

1 回答 1

2

首先,没有“ping”功能。因此,MotorClient 认为您正在尝试访问名为“ping”的数据库。名为“ping”的数据库显示在“未知对象”异常中。对于像“ping”这样的所有 MongoDB 命令,只需使用 MotorDatabase 的命令方法

其次,电机是异步的。您必须在 Tornado 协程中使用带有“yield”语句的 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 协程的介绍,请参阅重构 Tornado协程和Tornado 文档

于 2016-05-27T16:18:26.923 回答