Как запустить multiprocessing Pool в одном из потоков?
Можно ли в одном из потоков запустить multiprocessing Pool и на этот момент отдать ему все ресурсы? Остальные потоки относительно редкие I/O bound(появляются как результат обработки массива) задачи. Нужно добиться максимальной производительности для анализа массива. Честно говоря пока не совсем понимаю так как виизуально если запускать multiprocessing в одном из потоков то все остальные вроде автоматом блокируются так как поток исполнения полностью висит на пуле процессов(но это не точно).
Ivan Yakushenko, А чего в этом странного? (не говоря о задаче автора) Простой сервер работающий на тредах - пришёл реквест, надо сделать пдф - засунул задачу в пул процессов
javedimka, ну если я правильно понял, то у него не сервер, а что-то там считает в массиве в перемешку с сетью. В любом случае управлять всем этим асинхронно будет проще, а нужные операции вызывать в executor.
Синхроный запрос индекса уйдёт на новый поток после того как сменю конфигурацию. Сейчас нужно уменьшить время разбора ответов иначе индекс улетает уходит вперёд и парсер за ним не успевает.
Andrey_Dolg, почему вместо Thread 1 и Thread 2 не сделаешь 2 исполняемых скрипта, взаимодействие и очереди через тот же Redis. В идеале разбор ответов выкинуть в еще один скипт. В итоге у тебя будет 1 скрипт который работает с запросами (асинхронный с aiohttp) и выкидывает результат в очередь Redis, из неё эти результаты забирает скрипт, в котором так же в качестве обработчика асинхронные функции, процессы спавнятся с ProcessPoolExecutor.
Ivan Yakushenko, Ну редис отказывался ставится на первой легкой конфигурации инстанса так что я его и не трогал. Касательно выброса результатов в редис не уверен но формально не так уж и много мегабайт должно получится. В общем-то основное немного сжатые рамки по времени запуска и отсутствие опыта работы с Redis в качестве хранилища очередей. Касательно этапа обработки формально асинхронность не особо нужна так как обработка это набор if и редкая вставка в очереди.
Andrey_Dolg, управлять данными из очереди асинхронными функциями гораздо проще за счет одного только await, плюс простой executor как для потоков, так и для функций.
Ivan Yakushenko, Не я именно про обработку результатов после eventloop, это просто массив на прогонку по условиям, там по идее await не должен иметь смысл, так как формально процессор не имеет точек ожидания в функции разбора результатов. Но это как я это понимаю. Вероятно позже подумаю над добавлением редиса и распараллеливания по процессам сейчас боюсь не хватит времени переписать код под это.