Detta beror på att du använder PyMongo felaktigt. Du skapar en ny MongoClient för varje fråga, vilket kräver att du öppnar en ny socket för varje ny fråga. Detta besegrar PyMongos anslutningspoolning, och förutom att vara extremt långsam betyder det också att du öppnar och stänger sockets snabbare än din TCP-stack kan hänga med:du lämnar för många sockets i TIME_WAIT-läge så att du så småningom får slut på portar.
Lyckligtvis är korrigeringen enkel. Skapa en MongoClient och använd den genomgående:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)