Denis
Так проблема как раз и найти мяч в воротах
https://paperswithcode.com/sota/image-classification-on-imagenet
Egor
А как у тебя flask_socketio получает вообще сообщения на отправку?
внутри стрима, до попадания в цикл, создается экземпляр класса для подключения к бд и для SDK к дата коллектору
Egor
при каждой итерации дата коллектор опрашивается, забирается N последних значений, и отдается по вебсокетам
Egor
Дата коллектор - это что?
https://github.com/splunk/splunk-sdk-python
Wqw
https://paperswithcode.com/sota/image-classification-on-imagenet
Да, я это либу юзаю, но там нету такого датасета мяч в воротах, но можно обучить правда
Tishka17
Оу
Egor
короче юзаю splunk python sdk для того чтобы работать с результатами поиска
Egor
не совсем дата коллектор, но и оно тоже:)
Tishka17
Так, а как ты гарантируешь, что у тебя два воркера не получат одно и то же сообщение?
Denis
ImageAi
Похоже, там керас под капотом
Denis
Надо искать датасеты с мячами в воротах и дообучать, либо искать одновременно мяч и ворота
Egor
Или у тебя выборка по условиям?
при запуске приложения запускается поток, внутри которого определяется список id задач, + запускается стрим из rethinkdb - когда задача добавляется с фронта, sid падает в список. Для каждого из этих id запускается таска. То есть уже на старте у них разных sid. Даже если поисковый запрос одинаковый. соответственно внутри стрима опрос по sdk идет относительно униикального id, по вебсокетам шлется в уникальный неймспейс (тоже по id)
Wqw
Надо искать датасеты с мячами в воротах и дообучать, либо искать одновременно мяч и ворота
Так вот, в этом и вопрос, что проще,я все-таки склоняюсь, что лучше сделать новый датасет мяч в воротах
Egor
на данный момент совсем не понимаю почему для одной и той же таски, которая по ходу выполнения кода точно должна запуститься только 1 раз, выделяется ForkPoolWorker-1 и ForkPoolWorker-2
Tishka17
Я не понимаю, а зачем тут селери
Egor
а для остальных таких же только по одному (воркеру?)
Tishka17
У тебя несколько процессов, которые обслуживают свои таск ид
Egor
Я не понимаю, а зачем тут селери
flask_socketio не будет работать с мультипроцессингом
Daniil
и другие части других футболистов
Egor
Эээ. В смысле?
для того чтобы flask_socketio юзать из-пот Тредов, эти треды в принципе должны быть отравлены гевентом, или гринлетом. То есть родные питонопотоки уже по умолчанию в пролете
Egor
собственно gunicorn с гевент воркером нужно запускать, или прописывать манки патчинг
Egor
иначе сообщения не шлются
Egor
так вот, все это ограничено лишь потоками. Если инкапсулировать функцию в процесс, из нее эмиты так же не будут работать
Tishka17
Ну как минимум, всегда можно через nginx балансировать
Egor
Какие ещё эмиты?
socketio.emit - отправка сообщения по вебсокетам
Tishka17
Ять
Tishka17
У тебя сообщения внутри одного процесса что ли только?
Egor
У тебя сообщения внутри одного процесса что ли только?
ну вот да, а я хочу каждый стрим запускать в своем процессе
Tishka17
То есть нельзя запустить 10 фласковых процессов на 2 серверах и ещё 10 сокетио на третьем сервере и отправлять сообщения?
Egor
теоретически возможно все
Tishka17
А что тогда за тема со стримами rethinkdb?
Egor
но я не вижу смысла юзать 2 сервера если у меня в одном из 8 ядер юзается только одно на 90%)
Egor
А что тогда за тема со стримами rethinkdb?
а это немного другое. это поток в котором генерируется список изменений в таблице
Tishka17
но я не вижу смысла юзать 2 сервера если у меня в одном из 8 ядер юзается только одно на 90%)
Ну без разницы же, это два процесса на одном сервере или на разных
Egor
у меня вот есть виртуалка с 8 ядрами под это дело
Alex
да и даже про виртуалки
Egor
и через селери кстати нагрузка таки размазывается
Denis
А зачем тут гевент, можно же на асинке и веб, и сокеты
Alex
ну естественно
Egor
только работает оно как-то не совсем очевидно
Tishka17
Суть в том, что процессы должны быть связаны через какое-то апи
Tishka17
Например, очередь сообщений
Egor
Tishka17
Я просто не знаю что такое стрим rethinkdb, поэтому и думал что это очередь
Tishka17
ну celery + redis юзается
Да не нужен тебе селери
Alex
только работает оно как-то не совсем очевидно
возьми вместо целери асинхронный сокетио и запускай пул процессов - воркеров
Egor
по идее их сельдерей через редис внутри себя и связывает
Tishka17
Возьми просто очередь сообщегий
Egor
попробую от нее уже плясать
Alex
Я ж уже вчера говорил python-socketio
Alex
умеет в асинхронный режим
Egor
ну так flask_socketio тоже работает асинхронно
Egor
за счет gevent
Alex
за счет gevent
ну у тебя ж именно с ним и проблема да?
Egor
там под капотом все тот же python-socketio
Alex
я предлагаю взять asyncio
Alex
хотя я вообще не уверен что тебе нужна асинхронность, если у тебя каждый клиент запускает стрим.
Tishka17
я предлагаю взять asyncio
Как это позволит ему заюзать несколько ядер?
Alex
у gevent действительно проблема с мультипроцессингом из-за агрессивного манкипатчинга
Egor
хотя я вообще не уверен что тебе нужна асинхронность, если у тебя каждый клиент запускает стрим.
у меня не клиент их запускает, а сервер, но в зависимости от количества задач существующих в спланке
Tishka17
Так, а сколько у тебя клиентов?
Tishka17
Чем мы вообще пытаемся cpu занять?
Tishka17
Рассылкой до клиентов?
Tishka17
Их там тысячи?