Виждал съм тази ситуация да се случва, когато стартирате Flask в режим на отстраняване на грешки . Ако вашият код хвърли изключение и дебъгерът се включи, транзакцията никога няма да бъде „отменена“ или „премахната“. В резултат на това сесията, която е била използвана за неуспешната заявка, никога не се връща в пула.
Решението е да деактивирате режима за отстраняване на грешки.
РЕДАКТИРАНЕ:
Има и друго обстоятелство, при което съм виждал това да се случва. Ако имате код, който се изпълнява автономно (т.е. не е част от HTTP транзакция – като независима нишка, стартирана и създадена при стартиране на приложението Flask), това обикновено включва заспиване. Ако осъществите достъп до сесията преди заспиване, ще завършите с прекъсната транзакция като тази по време на заспиване.
Друга възможност е да имате достъп до сесия от функцията за създаване на приложение. Ако го направите, не забравяйте да го .remove(). В противен случай тази сесия може да остане окачена в главната нишка в приложение gevent.