170 похожих чатов

Доброе утро. У меня есть CPU-bound функция для работы которой

нужно держать в оперативке много данных (1.6 гб) и aiohttp server который передает эту функцию в ProcessPoolExecutor через asyncio.run_in_executor.
1) Правильно ли я понимаю что если у меня пул из 4 процессов то в любом случаи RAM usage будет 1.6*5 gb?
2) Даже если я ставлю размер пула 1 то в памяти создается 2 инстанса графа, я так понимаю первый создается при импорте модуля а второй при вызове функции в экзекюторе, можно ли как-то не загружать граф в главном процессе?
Вот кусочек кода и 'ps aux':
async def api(request):
data = await request.json()
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(pool, functools.partial(graph_search, data=data))sapronov 3138112 14.5 20.6 4415180 1644660 pts/3 Sl+ 10:01 0:07 python3 app.py
sapronov 3138116 0.9 20.8 4295692 1662696 pts/3 S+ 10:01 0:00 python3 app.py

16 ответов

23 просмотра
Andrey-Sapronov Автор вопроса

Второй пункт решил заменой ProcessPoolExecutor на ThreadPoolExecutor, но все же, теперь получается у меня может ивент луп заблокироваться? Думаю было бы лучше все таки запускать в отдельном процессоре а в главном вообще в память не загружать граф. Буду очень благодарен за совет.

Andrey-Sapronov Автор вопроса
Evgeniy Blinov
Что за граф?

Граф векторов в 128 пространстве

Andrey Sapronov
Второй пункт решил заменой ProcessPoolExecutor на ...

а тебе надо, чтобы мастер процесс шарил память с процессами из ProcessPoolExecutor?

Andrey-Sapronov Автор вопроса
Michael Pokrovsky
а тебе надо, чтобы мастер процесс шарил память с п...

Если нет, то мне было хватило одного сабпроцесса где будет в памяти граф, что бы не заблокировать eventloop

Andrey Sapronov
Да, если это возможно

гугли multiprocessing SharedMemoryManager

Andrey-Sapronov Автор вопроса
Andrey Sapronov
Если нет, то мне было хватило одного сабпроцесса г...

если у тебя CPU bound то бесполезно использовать event loop, даже треды использовать бесполезно из-за GIL (но не в том случае, если по факту все вычислительные операции вызываются какими-то сишными функциями через питонячий программный интерфейс)

Andrey-Sapronov Автор вопроса
Michael Pokrovsky
если у тебя CPU bound то бесполезно использовать e...

event loop у меня только для асинхронно сервера, то что треды только ухудшают производительность при CPU bound из за GIL я знаю, благодарю. Но если у меня в TheadPoolExecutor будет крутиться "тяжелая" функция она же не заблокирует ивент луп на 3 сек например? а будет прерываться и иногда отдавать управление ивент лупу, верно?

Andrey Sapronov
Граф векторов в 128 пространстве

Я спросил с целью узнать, насколько большой процент операций у тебя именно графовые. Обходы там, поиски на графе и т.д. Если, скажем, бОльшая часть вычислительной сложности приходится на работу с отдельными нодами, а не с графом как с целым, имеет смысл разделить процессы по ролям. Одна роль — собственно хранители графа, способные получать команды (например через ту же очередь) и возвращать результат, другая — воркеры, которые что-то делают с нодами, но не держат граф в себе и всю нужную инфу запрашивают у графового процесса.

Andrey Sapronov
event loop у меня только для асинхронно сервера, т...

если делегировать выполнение CPU bound пулу процессов через run_in_executor? Если использовать TheadPoolExecutor, то из-за GIL будет и EventLoop в теории блокироваться

Andrey-Sapronov Автор вопроса
Evgeniy Blinov
Я спросил с целью узнать, насколько большой процен...

То что вы написали имеет конечно смысл, но я так глубоко не могу влезать, у меня есть либа с методами и все. https://github.com/nmslib/hnswlib

Andrey Sapronov
То что вы написали имеет конечно смысл, но я так г...

Какая разница, либа или не либа? Доступ к либе оборачивается в процесс, общаемся с ним через сообщения

Andrey-Sapronov Автор вопроса
Evgeniy Blinov
Какая разница, либа или не либа? Доступ к либе обо...

Для поиска в графе нужно его полностью держать в памяти, попросить в ноды которая держит граф кусок этого графа нельзя

Andrey Sapronov
Для поиска в графе нужно его полностью держать в п...

А что еще делает прога помимо поиска в графе?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта