MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

PyMongo solleva [errno 49] non può assegnare l'indirizzo richiesto dopo un gran numero di query

Questo perché stai usando PyMongo in modo errato. Stai creando un nuovo MongoClient per ogni query, che richiede di aprire un nuovo socket per ogni nuova query. Questo sconfigge il pool di connessioni di PyMongo e, oltre ad essere estremamente lento, significa anche che apri e chiudi i socket più velocemente di quanto il tuo stack TCP possa tenere il passo:lasci troppi socket nello stato TIME_WAIT quindi alla fine esaurisci le porte.

Fortunatamente, la soluzione è semplice. Crea un MongoClient e utilizzalo in tutto:

conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']

def _perform_queries(query):
    return coll.find(query).sort("date", -1)