【问题标题】:Checking Servers with Motor(Mongodb & Tornado)使用电机检查服务器(Mongodb 和 Tornado)
【发布时间】:2016-05-27 15:16:47
【问题描述】:

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

【问题讨论】:

    标签: python mongodb tornado pymongo tornado-motor


    【解决方案1】:

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

    第二,电机是异步的。您必须在 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 协程的介绍,请参阅 Refactoring Tornado Coroutines 和 Tornado documentation。

    【讨论】:

      猜你喜欢
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2011-08-05
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2017-12-13
      相关资源
      最近更新 更多