Jak działa łączenie połączeń w PyMongo?
Każda instancja Connection ma wbudowaną pule połączeń. Domyślnie każdy wątek otrzymuje własne gniazdo zarezerwowane podczas pierwszej operacji. Te gniazda są utrzymywane do momentu wywołania end_request() przez ten wątek.
Wywołanie end_request() umożliwia zwrócenie gniazda do puli i użycie go przez inne wątki zamiast tworzenia nowego gniazda. Rozsądne użycie tej metody jest ważne w przypadku aplikacji z wieloma wątkami lub z długimi wątkami, które wykonują niewiele wywołań do PyMongooperacji .
Alternatywnie połączenie utworzone za pomocą auto_start_request=False będzie udostępniać gniazda (bezpiecznie) między wszystkimi wątkami.
Myślę, że sprowadza się to do typu aplikacji, którą masz i jak długo żądania będą utrzymywać połączenie. Pomysł wywołania end_request
pomaga w przypadku długotrwałych żądań, które utrzymują się w gnieździe przez długi czas i powodują tworzenie wielu gniazd. Jeśli pojedyncze żądanie może zwolnić połączenie, gdy już go nie potrzebuje, gniazdo może zostać ponownie wykorzystane do innych żądań.
Jeśli są to szybkie żądania, to uważam, że auto_start_request=False
działa poprzez ponowne użycie gniazda.
Upewnienie się, że połączenie używa tego samego gniazda, oznacza, że będzie miało spójne odczyty. Pomyśl, jeśli utworzyłeś zapytanie, ale zostało opóźnione, a następnie natychmiast wykonałeś inne zapytanie i użyto innego gniazda. To gniazdo potrafi odpowiedzieć przed poprzednim. Miałbyś niespójne dane, ponieważ nie odzwierciedlają one poprzedniego zapisu.