Je to proto, že používáte PyMongo nesprávně. Pro každý dotaz vytváříte nového MongoClienta, což vyžaduje, abyste pro každý nový dotaz otevřeli nový soket. To maří sdružování připojení PyMongo a kromě toho, že je extrémně pomalé, to také znamená, že otevíráte a zavíráte sokety rychleji, než váš zásobník TCP stihne:příliš mnoho soketů necháváte ve stavu TIME_WAIT, takže vám nakonec dojdou porty.
Naštěstí je oprava jednoduchá. Vytvořte jednoho MongoClienta a používejte jej v:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)