Dies liegt daran, dass Sie PyMongo falsch verwenden. Sie erstellen für jede Abfrage einen neuen MongoClient, sodass Sie für jede neue Abfrage einen neuen Socket öffnen müssen. Dies verhindert das Verbindungspooling von PyMongo und ist nicht nur extrem langsam, sondern bedeutet auch, dass Sie Sockets schneller öffnen und schließen, als Ihr TCP-Stack mithalten kann:Sie lassen zu viele Sockets im TIME_WAIT-Zustand, sodass Ihnen schließlich die Ports ausgehen.
Glücklicherweise ist die Lösung einfach. Erstellen Sie einen MongoClient und verwenden Sie ihn durchgehend:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)