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

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

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

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

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

Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
лучше скажите, причём тут паскаль?
Alexey Kulakov
32
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
@PerlBanjoBot use v5.38; sub split_on_cond($arr, $cond) { ($a, $b) = ([], []); push @{ $cond->($_) ? $a : $b }, $_ for @$arr; ($a, $b) } use Data::Dumper; warn Dumpe...
Sergei Zhmylove
10
Всем привет! как узнать, что текст в TSkLabel был выведен сокращенным ? Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным function TFrmMai...
DELPHI SOLUTIONS
6
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Дебил? Я ищу друга
Bitard 228
27
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Карта сайта