これは、PyMongoを誤って使用しているためです。クエリごとに新しいMongoClientを作成しているため、新しいクエリごとに新しいソケットを開く必要があります。これにより、PyMongoの接続プールが無効になります。また、非常に遅いだけでなく、TCPスタックが維持できるよりも速くソケットを開閉できることも意味します。つまり、TIME_WAIT状態のソケットが多すぎるため、最終的にポートが不足します。
幸いなことに、修正は簡単です。 1つのMongoClientを作成し、それを全体で使用します:
conn = pymongo.MongoClient('mongodb://localhost:27017')
coll = conn.databases['race_results']
def _perform_queries(query):
return coll.find(query).sort("date", -1)