Dette skyldes, at du bruger PyMongo forkert. Du opretter en ny MongoClient for hver forespørgsel, som kræver, at du åbner en ny socket for hver ny forespørgsel. Dette besejrer PyMongos forbindelsespooling, og udover at være ekstremt langsom, betyder det også, at du åbner og lukker sockets hurtigere, end din TCP-stak kan følge med:du efterlader for mange sockets i TIME_WAIT-tilstand, så du til sidst løber tør for porte.
Heldigvis er rettelsen enkel. Opret én MongoClient og brug den hele vejen igennem:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)