1 个回答

这个错误是由于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连接池的问题,从而保证了程序的正常运行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进