1个回答
test
2024-07-05
这个错误是由于MongoDB的连接池没能够正确地处理多个进程同时调用的情况而出现的。为了避免这个错误,可以在每个进程中单独创建MongoDB的连接池,而不是使用共享连接池来处理MongoDB的查询。以下是修改后的代码示例,可以根据实际需要进行修改:
from urllib import parse
from pymongo import MongoClient
host = '122.25.31.65'
username = 'crar_sin_rw'
password = '9492412B_f3@A89'
password = parse.quote(password)
port = '27017'
db = 'crawler'
def get_mongo_client():
mongo_url = 'mongodb://{0}:{1}@{2}:{3}/{4}'.format(username, password, host, port, db)
return MongoClient(mongo_url)
def filter_mongo_data(json_data, db_name, collection_name):
print('进入数据库')
client = get_mongo_client()
cursor_result = client[db_name][collection_name].find(
{"stratagy_id": json_data['stratagy_id'], "app_name": json_data['app_name']})
if len(list(cursor_result)) < 5:
print("插入中....")
client[db_name][collection_name].insert_one(json_data)
client.close() # 关闭连接
return True
else:
print('此策略id今天已经插满 请明天插入')
client.close() # 关闭连接
return None
在上述代码中使用get_mongo_client()函数来创建一个新的MongoDB连接池。在每个进程中,filter_mongo_data()函数会先调用get_mongo_client()函数来创建一个新的连接池对象,然后根据需要执行查询操作,最后在函数末尾调用client.close()来关闭该连接池。这样,就可以避免多个进程同时调用MongoDB连接池的问题,从而保证了程序的正常运行
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容