Egor
Чем мы вообще пытаемся cpu занять?
подключение через sdk, забирание данных, отправка сокетио-сообщения
Egor
скажем так, 13 стримов грузят ядро на 80%
Egor
вот от этого можно считать нагрузку
Tishka17
Эээ. 13 стримов?
Tishka17
А клиентов сколько?
Tishka17
Я не знаю что такое стрим
Egor
так
Egor
давайте не будем путаться
Egor
еще раз
Tishka17
И как у тебя спланк и rethinkdb смешались
Tishka17
Я так понял, спланк - это что-то типа хадупа?
Egor
есть "стрим" - это функция в которой запускается бесконечный цикл, каждая итерация опрашивает спланк, и отправляет сообщение по сокетио
Tishka17
Ээ
Alex
ээээ
Alex
вот точно
Alex
и где тут у нас CPU bound
Tishka17
Ты уверен, что вообще те технологии используешь, которые нужны?
Alex
инахуа нам мультипроцессинг?
Tishka17
13 стримов на сколько клиентов?
Egor
13 стримов на сколько клиентов?
зачем столько вопросов про неких клиентов?
Egor
стримы отдаются на одну вебморду
Tishka17
зачем столько вопросов про неких клиентов?
Потому что сокетио связан с клиентами.
Egor
скажем так там чето типа продвинутого дашбординга
Tishka17
А остальное - нет
Tishka17
Стримы - это что-то типа топиков в кафке?
Tishka17
и я все ещё не понимаю, откуда тут CPU-bound
Egor
на клиенте (то есть в браузере) дашборда с 13 окошками, каждое из которых ловит сообщение по сокетио в своем неймспейсе
Alex
т.е. клиент у нас 1
Egor
я конкретно описал чуть выше что в данном случае является стримом
Egor
т.е. клиент у нас 1
ну допустим да, Одна страница с 13 компонентами, каждый из которых ловит сокетио по своему неймспейсу
Egor
рецинк тут вообще для фронта больше
Alex
ок. то есть 1 клиент, 13 сокетио подключений., которые занимаются IO
Tishka17
итого, rethink db выкинули. Есть поллинг спланка
Egor
и для тоого чтобы можно было новую задачу для спланка накинуть с фронта в реальном времени
Tishka17
так
Tishka17
а CPU тут кто ест?
Tishka17
спланк?
Tishka17
или поллинг спланка?
Alex
так еще раз, что мешает запустить несколько инстансов фласка?
Alex
и разруливать сверху nginx \ gunicorn
Egor
а CPU тут кто ест?
спланк вообще на отдельном серваке, цпу на мой взгляд жрет поллинг + отправка сообщения по сокетио. Итерация ради теста сейчас занимает 1 секунду
Egor
ну будет 2-3
Alex
я не совсем понимаю что ты собрался делать в мультипроцессинге. крутить бесконечные IO лупы?
Egor
опрос спланка + отправка сообщения - 1 секунда?
да. опрос происходит по конкретному поиску, уже запущенному там, и забирается json с 15 словарями в списке, по сути строки 3
Tishka17
а параллелить ты что тут собрался?
Egor
соединение там нормальное
Сыктывкариум
Господа, такой вопро. Надо поднять сервер, что бы он отдавал пару файлов. Сделал на HTTPServer. В BaseHTTPRequestHandler в do_GET есть такой код: file_path = curdir + sep + file_name f = open(file_path, 'rb') self.send_response(200) self.send_header('Content-Type', 'application/octet-stream') self.send_header('Content-Length', path.getsize(file_name)) self.send_header('Content-Disposition', 'attachment; filename="'+file_name+'"') self.end_headers() self.wfile.write(f.read()) f.close() проверил на маленьком файле (2 мб) - норм работает. Попробовал отдать 50 мб - браузер пишет, что соединение оборвано. Куда копать? Или может есть альтернатива HttpServer? мне надо по расписанию запустить сервак, что бы клиент скачал 2 файла, а потом вырубить сервак, т.е. надо отловить ГЕТ-запрос определённый и выключить сервер.
Egor
а параллелить ты что тут собрался?
эти "стримы" которые опрашивают спланк и шлют сообщения на фронт по сокетам
Egor
они должны запускаться параллельно, оно так и работало на уровне потоков, но было ограничено 1 ядром
Egor
а я хочу чтобы при создании такого "стрима" запускался 1 процесс, а не 1 поток
Egor
и тогда нагрузка будет размазываться уже операционной системой по сути
Alex
а я хочу чтобы при создании такого "стрима" запускался 1 процесс, а не 1 поток
еще раз что мешает запустить несколько инстансов фласка.
Tishka17
да откуда тут нагрузка?
Tishka17
т.е. IO лупы? о_О
ты понял где тут нагрузка?
Egor
еще раз что мешает запустить несколько инстансов фласка.
я так понимаю что в данном случее придется распиливать приложение на микросервисы
Egor
ну я не особо силен в запуске нескольких воркеров для фласка
Tishka17
я так понимаю что в данном случее придется распиливать приложение на микросервисы
ещё раз: нормальная практика - несколько ОДИНАКОВЫх процессов, которые делают одно и то же
Сыктывкариум
а почему нельзя было взять nginx?
Ради двух файлов поднимать нджинкс? В принципе ничего, но суть в том, что после того, как клиент скачает файлы и пошлёт нужный гет серверу, сервер вырубится и оповестит админа, что файлы были скачаны
Alex
“поднимать nginx"
Alex
охренеть как сложно
Egor
чем ты фласк вообще запускаешь?
gunicorn с гевент воркером
Сыктывкариум
ну всяко лучше чем поднимать самописный небезопасный говносервер
ну безопасность говносервера обеспечивается файрволом, который пускает на этот сервер только один комп.