Ini karena Anda salah menggunakan PyMongo. Anda membuat MongoClient baru untuk setiap kueri, yang mengharuskan Anda membuka soket baru untuk setiap kueri baru. Ini mengalahkan penyatuan koneksi PyMongo, dan selain menjadi sangat lambat, ini juga berarti Anda membuka dan menutup soket lebih cepat daripada yang dapat dipertahankan oleh tumpukan TCP:Anda meninggalkan terlalu banyak soket dalam status TIME_WAIT sehingga Anda akhirnya kehabisan port.
Untungnya, perbaikannya sederhana. Buat satu MongoClient dan gunakan di seluruh:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)