Widziałem tę sytuację, gdy uruchamiasz Flask w trybie debugowania . Jeśli Twój kod zgłosi wyjątek i uruchomi się debuger, transakcja nigdy nie zostanie „wycofana” ani „usunięta”. W rezultacie sesja użyta w żądaniu, które nie powiodło się, nigdy nie zostanie zwrócona do puli.
Rozwiązaniem jest wyłączenie trybu debugowania.
EDYCJA:
Jest jeszcze jedna okoliczność, w której to widziałem. Jeśli masz kod, który działa autonomicznie (tzn. nie jest częścią transakcji HTTP – na przykład niezależny wątek uruchomiony i odrodzony podczas uruchamiania aplikacji Flask), zwykle wiąże się to z uśpieniem. Jeśli uzyskasz dostęp do sesji przed snem, skończysz z zawieszoną transakcją podczas snu.
Inną możliwością jest dostęp do sesji z funkcji tworzenia aplikacji. Jeśli to zrobisz, upewnij się, że .remove() to. W przeciwnym razie ta sesja może pozostać zawieszona w głównym wątku w aplikacji gevent.