MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

PyMongo soulève [errno 49] ne peut pas attribuer l'adresse demandée après un grand nombre de requêtes

C'est parce que vous n'utilisez pas correctement PyMongo. Vous créez un nouveau MongoClient pour chaque requête, ce qui vous oblige à ouvrir un nouveau socket pour chaque nouvelle requête. Cela va à l'encontre de la mise en pool des connexions de PyMongo, et en plus d'être extrêmement lent, cela signifie également que vous ouvrez et fermez les sockets plus rapidement que votre pile TCP ne peut le faire :vous laissez trop de sockets dans l'état TIME_WAIT et vous finissez par manquer de ports.

Heureusement, la solution est simple. Créez un MongoClient et utilisez-le partout :

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

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