Как работи обединяването на връзки в PyMongo?
Всеки екземпляр на Connection има вграден пул на връзки. По подразбиране всяка нишка получава свой собствен сокет, запазен при първата си операция. Тези сокети се задържат, докато end_request() не бъде извикан от тази нишка.
Извикването на end_request() позволява гнездото да бъде върнато в пула и да се използва от други нишки, вместо да се създава нов сокет. Разумното използване на този метод е важно за приложения с много нишки или с продължителни нишки, които правят малко извиквания към PyMongooperations .
Алтернативно, Връзка, създадена с auto_start_request=False, ще споделя гнезда (безопасно) между всички нишки.
Мисля, че се свежда до типа приложение, което имате и колко дълго ще задържат заявките за връзка. Идеята за извикване на end_request
помага при дългосрочни заявки, които се задържат в сокет за дълго време и причиняват създаването на много сокети. Ако една заявка може да освободи връзката, когато вече не се нуждае от нея, тогава сокетът може да бъде преназначен за други заявки.
Ако са бързи заявки, тогава смятам, че auto_start_request=False
работи чрез повторно използване на сокета.
Подсигуряването, че връзката продължава да използва същия сокет, означава, че ще има последователни четения. Помислете, ако сте направили заявка, но тя се забави и след това незабавно направи нова заявка и използва различен сокет. Този сокет успява да отговори преди предишния. Ще имате непоследователни данни, тъй като те не отразяват предишното записване.