我更新了 pymongo 和 mongoengine 软件包,现在分别是 4.6.0 和 0.27.0。
升级后在我的 Windows 机器上,我正在尝试运行 celery 任务。在那个 celery 任务中,我编写了多个函数,其中一旦该特定函数成功运行,我就会关闭客户端,然后它会调用另一个具有芒果客户端的函数,但这给我提供了给定的错误:
raise InvalidOperation("关闭后无法使用 MongoClient") pymongo.errors.InvalidOperation:关闭后无法使用 MongoClient
代码: 我正在创建客户端并以给定的方式关闭它。
from pymongo import MongoClient
mongo_client = MongoClient(host=host,
port=int(port),
username=username,
password=password,
authSource=authSource_db,
maxPoolSize=15,
MaxIdleTimeMS=120000
)
mongo_client.close()
发生这种情况是因为 celery 是异步的。所以任务执行的顺序是不确定的。在这种情况下,其中一个任务需要客户端,但另一个任务可能在前一个任务完成并且您关闭客户端后定义。
with MongoClient('mongodb://localhost:27017/') as client:
# your code here
任务完成后,这将自动关闭连接。