Dit komt omdat u PyMongo verkeerd gebruikt. U maakt voor elke query een nieuwe MongoClient, waarvoor u voor elke nieuwe query een nieuwe socket moet openen. Dit verslaat PyMongo's pooling van verbindingen, en behalve dat het extreem traag is, betekent het ook dat je sockets sneller opent en sluit dan je TCP-stack kan bijhouden:je laat te veel sockets in de TIME_WAIT-status staan, zodat je uiteindelijk geen poorten meer hebt.
Gelukkig is de oplossing eenvoudig. Maak één MongoClient en gebruik deze overal:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)