@ru_python

Страница 7144 из 9768
Alex
23.11.2018
23:32:29
> По логике необходимо выделять один поток для одного залогиненного юзера Эм…. вот так делать точно не надо.

Егор
23.11.2018
23:33:44
а как посоветуете? мне ранее не приходилось продумывать логику использования потоков в приложении, так что изобретаю велосипед. Обзорной инфы на этот счет нагуглить как-то не вышло

Google
Alex
23.11.2018
23:37:13
а как посоветуете? мне ранее не приходилось продумывать логику использования потоков в приложении, так что изобретаю велосипед. Обзорной инфы на этот счет нагуглить как-то не вышло
зачем там вообще потоки? насколько я могу судить для flask-socketio никаких дополнительных потоков (а тем более по потоку на пользователя) создавать не нужно.

Егор
23.11.2018
23:38:08
Полно информации по этому поводу
преимущественно есть либо документация к библиотекам, либо простые примеры их применения, а ответа на вопрос как правильно использовать потоки для веб-приложения с сокетами, я не нашел. Приходится собирать информацию об этом по крупицам

зачем там вообще потоки? насколько я могу судить для flask-socketio никаких дополнительных потоков (а тем более по потоку на пользователя) создавать не нужно.
хм... попробую убрать из приложения все что с этим связано и запилить заново, на базе толькл fask-socketio без доволнительных рюшечек

может получится)

Alex
23.11.2018
23:39:02
откуда такой вопрос вообще возник? повторюсь, на кой хрен там потоки?

Егор
23.11.2018
23:39:51
на сколько я понял, так как соединение по вебсокетам, в отличии от реста, происходит постоянно, необходимо для каждого такого соединения выделять отдельный поток

Alex
23.11.2018
23:40:59
gevent не?

в общем, читай документацию по flask-socketio. и какие-нибудь основы по асинхронному вводу-выводу \ работе с сетью.

Егор
23.11.2018
23:42:42
я ручками эти потоки не создаю, они же по идее должны сами создаваться, как раз, при использовании gevent, как это описано в ссылке на документацию выше

ок, спасибо

Alex
23.11.2018
23:43:52
цикл обработки сообщений (в gevent включительно) работает тащем-та в одном потоке ОС…

> я ручками эти потоки не создаю > если убивать текущий поток (получается через del threading._active[threading.current_thread().ident] ) это какой-то сюр

я ручками эти потоки не создаю, они же по идее должны сами создаваться, как раз, при использовании gevent, как это описано в ссылке на документацию выше
gevent создает т.н. легковесные потоки или гринлеты в рамках одного физического потока ОС. тебя это волновать должно в последнюю очередь.

Google
Alex
23.11.2018
23:55:30
> на бэке создается от одного до несколььких потоков, при следующих обновлениях количество потоков увеличивается как ты определил, что количество потоков увеличивается?

Никита
24.11.2018
00:00:37
Нельзя же просто взять технологию не понимая что она делает

Alex
24.11.2018
00:02:03
Нельзя же просто взять технологию не понимая что она делает
да, просто возникает впечатление, что он делает кучу ненужных телодвижений, не понимая что при этом происходит и зачем.

чтобы использовать flask-socketio глубоких познаний в механизмах работы gevent для начала не требуется.

Егор
24.11.2018
00:17:23
при обновлении страницы на сайте

это и есть те самые легковесные потоки?

я совсем забыл указать на еще один аспект - в приложении используется rethinkdb changefeeds - подписка на обновление данных в таблице feed = r.table('messages').filter({'sender': payload['user_id']}).changes().run(conn) for change in feed: logging.warning(change) socketio.emit('push', str(change), namespace='/websocket/user_' + str(change['new_val']['sender']))

Alex
24.11.2018
00:21:45
при обновлении страницы на сайте
ты увидел увеличивающийся счетчик и подумал что у тебя растет количество потоков?

Егор
24.11.2018
00:22:06
ну в общем да

Alex
24.11.2018
00:22:44
как я уже сказал это просто имя потока, это не значит что запущено 12 потоков

Егор
24.11.2018
00:22:44
не нашел ни одной доки где ясно было бы написано как с этим работать

понял

Alex
24.11.2018
00:23:15
не нашел ни одной доки где ясно было бы написано как с этим работать
почитай любой мануал по линуксу как смотреть дерево процессов \ потоков

ps \ top \ htop

Егор
24.11.2018
00:25:35
на самом деле смутило еще и то, что logging.warning(threading.enumerate()) отображает словарь в котором скапливаются все эти "имена"

на сколько понмю, enumerate как раз возвращает список активных потоков

Alex
24.11.2018
00:27:04
Егор
24.11.2018
00:30:59


Google
Егор
24.11.2018
00:31:28
несколько раз обновил страницу, список в логе - вывод logging.warning(threading.enumerate())

потому и возникло предположение что они накапливаются, а не просто именуются по разному

и да, когда отправляется уведомление по сокетио, оно в логе продублировано, сколько этих потоков в списке)

Alex
24.11.2018
00:34:13
потому и возникло предположение что они накапливаются, а не просто именуются по разному
во-первых нужно понимать закрылись ли у тебя соединения на клиенте \ на сервере. во-вторых попробуй помониторить чуть дольше динамику.

Егор
24.11.2018
00:34:47
ага. на самом деле по ходу нашего обсуждения, появилась идея уменьшить количество "черных коробок" и выпилить gevent

и ручками создавать дополнительный поток там где это надо

может это манки патчинг так себя ведет, или моя неопытность не дает понять "очевидных" вещей

так что лучше так

Егор
24.11.2018
00:35:57
почему же?

вы считаете что тут в принципе не нужна многопоточность?

Alex
24.11.2018
00:37:08
нет, просто во-первых ты по той же неопытности реализовать это корректно не сможешь (да и не факт что flask-socketio будет в этом случае работать).

во-вторых принцип по потоку на соединение не масштабируется.

+ оверхед на переключение контекста и память

читай c10k problem

Егор
24.11.2018
00:42:45
есть еще одна вещь которая вызывает смутные сомнения - для того чтобы использовать вот это https://rethinkdb.com/docs/changefeeds/python/ в моем апи существует один метод, внутри которого по сути вечный цикл for

когда фиксируется изменение в таблице, по вебсокету конкретному юзеру отправляется сообщение на фронт

я полагал что это все может быть в отдельном потоке, и цикл грохнется если этот поток завершится

это, выходит, тоже считается плохой практикой? чтобы уйти от концепции "поток на соединение"

Google
Егор
24.11.2018
00:45:46
и стоит запилить отдельный сервис под это дело, а не пихать его в апи



hachiman
24.11.2018
05:05:48
Что за прога: Проблемы, вывод, Консоль, отладки, терминал, 2: ssh ?

Андрей
24.11.2018
05:20:53
Схема бредовая, учите блоксхемы ГОСТ

Pablo
24.11.2018
05:25:22


Pavel
24.11.2018
05:31:35
Иф не срабатывает, а проверяется. И если проверка прошла, то выполняется первый кусок кода, а если не прошла - второй.

Егор
24.11.2018
05:32:41
Внутри которого в терминале запущен ssh до сервака где развернут бэк

Егор
24.11.2018
05:37:46
hachiman
24.11.2018
05:38:07
Егор
24.11.2018
05:38:35
local ?
VDS. Что конкретно в этом вызывает интерес?)

hachiman
24.11.2018
05:39:21
VDS. Что конкретно в этом вызывает интерес?)
сорян, хотел спросить где твой сервер

Егор
24.11.2018
05:40:53
Heroku or smt like that ?
Просто виртуальная машина арендованная

Не всякие спешл-сервисы с урезанным линухом

hachiman
24.11.2018
05:42:51
Егор
24.11.2018
05:43:35
hachiman
24.11.2018
05:43:44
......?)
Что за ВебКу пишешь ?

Google
Егор
24.11.2018
05:45:38
Думаю в рамках текущего чата это уже флуд, а вообще я сам джун, так что плохая идея)

Топ
24.11.2018
07:36:38
Привет

Народ, может кто помочь решить олимпиадную задачу (на Python)? Знаю что офф-топик , поэтому кину само задание в лс . Пожалуйста ?

Топ
24.11.2018
07:44:57
кинул чекай лс

Как это на python решить ?

Кидай
Сможешь помочь ?

hachiman
24.11.2018
08:01:27
Привет
Привет, можно посмотреть на задачу ?

Топ
24.11.2018
08:05:27
Двоеборье Соревнования по двоеборью проводятся в два тура. На каждом из туров участники получают некоторые баллы, причем баллы всех участников различны как на турах, так и в сумме за два тура. Считается, что участник занял место K, если ровно K-1 из участников набрали больше баллов, чем он. Всего в соревновании участвовало N человек. На первом туре Вася занял место P, а на втором туре - место Q. Определите, какое минимальное и максимальное место мог занять Вася по сумме двух туров. Формат входных данных Во входных данных заданы три числа: N (1 ≤ N ≤ 109), P и Q (1 ≤ P, Q ≤ N). Формат результата Выведите два числа - минимальное и максимальное место, которое мог занять Вася. Примеры Входные данные 3 1 1 Результат работы 1 1 Входные данные 3 1 2 Результат работы 1 2 Входные данные 4 4 2 Результат работы 2 4

Страница 7144 из 9768