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 ответов

21 просмотр
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
Для поиска в графе нужно его полностью держать в п...

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

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта