Size: a a a

2020 October 05

KK

Kirill (Cykooz) Kuzm... in rannts
Эмм, что-то я это пропустил
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Я думал это у меня треды от aiofiles
источник

БС

Байт Словович... in rannts
Sergey Z
какой смысл использовать в расчётах количество ядер, если монга "примерно однопоточная"?
потому что запрос выполняется в несколько стадий, которые хорошо параллелятся. Например расчет query plan, анализ какие страницы заафектятся, загрузка страниц в кеш и т.д.. Плюс часть коннекшенов, будут просто висеть без запросов, потому что твой код что то делает в этот момент. Опять же я говорю не про бенчмарки, а про реальность.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Надо перепроверить
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Roman Bolkhovitin
https://motor.readthedocs.io/en/stable/configuration.html#thread-pool-size

Motor uses the Python standard library’s ThreadPoolExecutor to defer network operations to threads. By default, the executor uses at most five threads per CPU core on your system; to override the default set the environment variable MOTOR_MAX_WORKERS.

Some additional threads are used for monitoring servers and background tasks, so the total count of threads in your process will be greater.

🤷‍♂
И ведь правда на тредах он. Сцук!
источник

KK

Kirill (Cykooz) Kuzm... in rannts
А сами разрабы pymongo не шевелятся делать асинхронный вариант?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
А то ведь получается что всё равно больше чем CPU_COUNT * 5 запросов по дефолту выполняться не будет.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Хотя это уже больше, чем "эвристика" от Антона 😊
источник

БС

Байт Словович... in rannts
А зачем тебе асинхронный код для работы с базой? Использовать треды это прям правильно. Другое дело, что код часто не красив, приходится на любой чих создавать функцию и её запускать в тред пуле. А еще можно иногда забыть и запустить код в "лупе"
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Байт Словович
А зачем тебе асинхронный код для работы с базой? Использовать треды это прям правильно. Другое дело, что код часто не красив, приходится на любой чих создавать функцию и её запускать в тред пуле. А еще можно иногда забыть и запустить код в "лупе"
Ну если у меня приложение асинхронное и ему своего оверхеда хватает в евент-лупе. А тут ещё и 5-20 тредов для работы с базой будут мешаться и бороться за GIL
источник

KK

Kirill (Cykooz) Kuzm... in rannts
motor так и делает - у него там что-то вроде метаклассов, которыми генерятся асинхронные версии всех классов из pymongo. В частности для asyncio эти классы используют ThreadPoolExecutor
источник

БС

Байт Словович... in rannts
10-20 тредов это много для соединения с базой, но правда зависит от самой базы и профиля нагрузки..
во вторых они не будут бороться за gil, они будут ждать ответа от базы большую часть времени, в общем будут висеть на других локах.
И я не понимаю как производительность улучшиться из за использования asyncio при работе с базой
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну может сильно и не улучшится, но оверхед всяко есть. Висеть в локе на сокете мог бы и event-loop. А остальной код pymongo, который формирует запрос к mongo и парсит ответ - всё равно будет скорее всего хватать GIL. С тем же успехом он бы работал в основном треде, только не было бы оверхеда на переключение потоков.
источник

БС

Байт Словович... in rannts
что то я сомневаюсь, но меня можно убедить, показав бенчмарки тредого и чисто асинхронного кода.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Python 3.9 зарелизился!
источник

KK

Kirill (Cykooz) Kuzm... in rannts
источник

KK

Kirill (Cykooz) Kuzm... in rannts
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Теперь питон из коробки умеет в таймзоны:
https://docs.python.org/3.9/library/zoneinfo.html

Правда оно юзает локально установлению в OS базу таймзон. Если у вас её нет (например в винде), то надо ставить пакет tzdata.
источник

RB

Roman Bolkhovitin in rannts
Любое выражение в декораторе это демонстрация возможностей нового парсера?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Наверное в том числе, хотя кому-то фича будет полезной.
источник