1

我想知道如何检查电机连接是否成功。如果我杀死 mongod 进程并执行:

con = motor.MotorClient(host,port)

我明白了"[W 150619 00:38:38 iostream:1126] Connect error on fd 11: ECONNREFUSED"

有道理,因为没有服务器在运行。但是,因为这不是例外,所以我不确定如何检查这种情况?

我以为我可以检查 con.is_mongos 但​​是它似乎总是 False (也在文档中说明)。

如何检查上述错误情况?

4

2 回答 2

2

一般来说,答案是不要。不要检查与 MongoDB 的连接是否正常。您可能会发现它现在正在工作,但下一个操作可能会失败——您的系统管理员可能会拔掉您的电缆,服务器崩溃等等。由于无论如何您都需要在应用程序中处理错误,因此没有必要提前检查 Motor 是否已成功连接。

如果您坚持进行这种毫无意义的检查,即使知道它对您没有任何好处,那么您可以这样做:

@gen.coroutine
def am_i_momentarily_connected_to_mongodb():
    yield MotorClient().admin.command('ismaster')

如果您的 IOLoop 已经启动并且您处于协程中,则可以执行以下操作:

yield am_i_momentarily_connected_to_mongodb()

或者,如果您还没有开始循环:

IOLoop.instance().run_sync(am_i_momentarily_connected_to_mongodb)

但是就像我说的那样,分布式系统的本质是发现现在可用的服务器并不能告诉你接下来会发生什么

于 2015-06-19T02:04:15.437 回答
0

虽然 A. Jesse Jiryu Davis 有观点。当你想检查你的连接时,当然有有效的情况。例如,当您启动程序时,用户可能忘记启动 MongoDb。一个好的错误消息比一个长的堆栈跟踪更好。

以下是检查连接的方法:

import asyncio
import motor.motor_asyncio
async def get_server_info():
    # replace this with your MongoDB connection string
    conn_str = "<your MongoDB Atlas connection string>"
    # set a 5-second connection timeout
    client = motor.motor_asyncio.AsyncIOMotorClient(conn_str, serverSelectionTimeoutMS=5000)
    try:
        print(await client.server_info())
    except Exception:
        print("Unable to connect to the server.")
loop = asyncio.get_event_loop()
loop.run_until_complete(get_server_info())

来源:https ://docs.mongodb.com/drivers/motor/#std-label-connect-atlas-motor-driver

于 2022-01-11T11:11:57.270 回答