И так, я недавно задавал вопрос про выбор асинхронной ORM для MongoDB на Python 3.7, так и не нашёл ни одной, которая устраивала бы меня по количеству доступных полей, основные которые рассматривал - motorengine, umongo, aiomotorengine и ещё штук пять.
Сегодня в очередном порыве гугления случайно наткнулся на статью
Motor vs PyMongo - Asynchronous vs Synchronous DB calls, в которой у автора асинхронный motor (на котором, собственно, построены почти все асинхронные ORM) был
всегда медленнее синхронного pymongo.
В комментариях некий араб объяснил это тем, что мотор создаёт лишь иллюзию асинхронности.
Цитата
There is a simple reason why Motor is slower than pymongo. Because it is NOT truly asynchronous. Let me tell you why.
For any IO application to be called asynchronous, at the heart of it, it needs to be using NON BLOCKING SOCKETS (basic OS concepts every CS Major is aware of). Motor does not. It simply throws up a new thread (tell me about the genius in that??) every time you make a call. It is super resource intensive as a result. Each thread is simply running a pymongo instance, which finally at the end of the day, is using the same old blocking IO socket :) :D (He he he, fooled you!!!)
Once the thread retrieves the result from the socket, it returns to the caller in an non-blocking fashion, wonderfully throwing up the illusion of a so called 'asynchronicity'
Собственно вопрос: если у меня весь код, кроме вызовов БД, будет работать на том же синхронном mongoengine, а всё остальное асинхронно - будет ли профит, или эти блокировки нивелируют прирост производительности?