@ru_python

Страница 2206 из 9768
Aragaer
11.02.2017
17:00:35
дает полчаса-час бодрости и ясной головы. Потом спать 8)

Alexander
11.02.2017
17:00:46
вот пример

мне нужно обрабатывать все события в классе Server

UnkownUSR
11.02.2017
17:01:28
Да для меня и кофе обычный - не особо хорошо. Потом сердце бывает чутка покалывает. Думал уже болячка какая - ан нет) Когда военком призывал сердце проверили - влепили а1

Google
UnkownUSR
11.02.2017
17:01:44
Значит все нормально

Пока что

Aragaer
11.02.2017
17:02:41
мне нужно обрабатывать все события в классе Server
Передавать сервер аргументом в конструктор Device, чтобы там внутри self._server.handle(event)

Alexander
11.02.2017
17:02:55
т.е. колбеки городить?

хочется красиво сделать

и главное правильно

Aragaer
11.02.2017
17:03:30
у меня с сердцем не все в порядке - Б1. Кофе пью редко. От кофе потом глаза нараспашку. Но с сердцем норм

это не коллбэк же, это хэндлер

"я хочу обрабатывать в сервере" - сделай в сервере метод хэндлер и вызывай его

но это все равно не правильно

сначала сделай

Alexander
11.02.2017
17:04:18
но тогда не нарушается ли принцип ООП?

Aragaer
11.02.2017
17:04:20
чтобы работало

Google
Alexander
11.02.2017
17:04:25
да не бойся

я уже сделал

и работает

но мне не нравится

Aragaer
11.02.2017
17:04:40
а потом уже рефакторь так, чтобы было по ООП

Alexander
11.02.2017
17:04:50
супер

Aragaer
11.02.2017
17:05:07
ну смотри

Alexander
11.02.2017
17:05:07
я попросил помощи а не рассказывать про этапы написания и отладки ПО

Игорь
11.02.2017
17:05:15
в threading есть event

Aragaer
11.02.2017
17:05:21
это вполне нормальный dependency injectioon

событие должно обрабатываться в сервере, значит сервер является dependency для device

передавай его в конструкторе или выставляй сеттером

Alexander
11.02.2017
17:05:56
но он также будет и для всех остальных классов

получается что все знают про сервер

про класс

Aragaer
11.02.2017
17:06:22
метод make_event у сервера считается "публичным", соответственно Device будет им пользоваться

Alexander
11.02.2017
17:06:23
а это не хорошо

UnkownUSR
11.02.2017
17:06:24
Хотя, честно говоря, я не до конца уверен в честности военкомата. Моему другу (к слову, из таблицы для проверки зрения видит только первые две строчки) окулист влепил а1. Тут уж, как говориться: годен для ближнего боя нах)

Aragaer
11.02.2017
17:06:41
все знают про то, что события обрабатываются не здесь, а кем-то еще

они не знают, что этот "кто-то еще" это один общий для всех сервер

Google
Aragaer
11.02.2017
17:07:36
но они знают, что этот "кто-то еще" приходит к ним аргументом и что у него есть метов make_event, который надо вызвать

Alexander
11.02.2017
17:07:41
кто нибудь сталкивался с такой проблемой?

ну хз

просто проект уже не маленький (порядка 10к строк)

и сделано как раз именно так

Игорь
11.02.2017
17:08:50
а это не хорошо
по логике разрабов threading, ты создаешь некий класс, который будет заниматься передачей ивентов. Раздаешь этот класс всем потокам, и они через него уже связываются между собой. Разрабы этого модуля уже напилили несколько таких стандартных классов.

Aragaer
11.02.2017
17:08:53
я сталкивался с проблемой "я начал выстраивать офигенскую архитектуру и чего-то перемудрил, теперь хочу это мудрое сделать красивым".

Alexander
11.02.2017
17:08:53
как ты предлагаешь

Aragaer
11.02.2017
17:09:18
вот прямо сейчас в одном своем проекте эту мудрость выпиливаю

Nikolay
11.02.2017
17:09:21
да и сам threading не нужен в большинстве задач

Aragaer
11.02.2017
17:09:29
получается тривиально и красиво

Игорь
11.02.2017
17:10:35
по логике разрабов threading, класс тебе особо не нужен
например лок. Где-то я определяю локер queue_lock = threading.RLock(), а потом раздаю его всем остальным, и лочу нужные ресурсы с помощью этого локера

Игорь
11.02.2017
17:11:55
Nikolay
11.02.2017
17:13:15
я посмотрел пример, там треды
какую задачу ты хочешь решить?

Игорь
11.02.2017
17:15:01
давай с другой стороны зайдем. Зачем тебе треды вообще?
а лично в моей, уже решенной задаче, основное тело программы создает кучу тредов, которые делают свои задачи, результаты складывают в очередь, а другой тред разгребает эту очередь и складывает все в базу. Выходит быстрее, чем все это дело будет обрабатывать один поток. ЗЫ. афтар экземпла не я

Google
Nikolay
11.02.2017
17:17:48
ну то есть можно в качестве ресерча сделать такой проект

но быстрым он не будет

и эффективным тоже

Admin
ERROR: S client not available

Roman
11.02.2017
17:18:25
В лучшем случае использование тредов не замедлит исполнение по сравнению с однопоточным вариантом. В худшем - будет медленнее чем в один поток

Alexander
11.02.2017
17:18:32
допустим убираем потоки и делаем все на асинхроне

вопрос все равно остался

как лучше всего передать события в основной класс

Nikolay
11.02.2017
17:19:00
вопрос все равно остался
если у тебя асинхрон - в большинстве случаев очередь тебе не нужна

потому что у тебя уже есть генераторы

ты передаешь просто генератор в класс и он сам из него все достает

Игорь
11.02.2017
17:19:39
такие вещи в питоне тредами делать бессмысленно, ибо GIL
нет. Ибо время на обращение-ответ от некоего сервера в интернетах где-то 30 сек с учетом ошибок. Если каждый раз ждать ответ, то 2ляма запросов ты будешь две недели разгребать. А если создать 50 тредов, которые будут выполнять запрос, получать данные и складывать и для обработки. то на решение проблемы выйдет в разы меньше времени, ибо мы убираем самое узкое место.

Alexander
11.02.2017
17:20:19
в 3 вроде лучше дела с GIL

Nikolay
11.02.2017
17:20:20
делать треды в надежде что-то ускорить - в 90% бессмысленно

Google
Alexander
11.02.2017
17:20:30
не нужно ускорять

Nikolay
11.02.2017
17:20:33
в 3 вроде лучше дела с GIL
да, но тем не менее

он есть

Alexander
11.02.2017
17:20:39
нужно не усложнять

асинхрон хорош в скрипте на 150 строк

Denis
11.02.2017
17:20:49
Как раз блокирующие запросы тредами ускоряются

Nikolay
11.02.2017
17:20:55
нужно не усложнять
ну так что может быть проще одного потока и генератора? :)

или во что?

Roman
11.02.2017
17:21:24
Как раз блокирующие запросы тредами ускоряются
Их всего несколько штук. Остальное покрывается o_nonblock

Игорь
11.02.2017
17:21:26
Denis
11.02.2017
17:21:26
Ну судя по его сообщению, в сеть

Nikolay
11.02.2017
17:21:42
в сеть
протокол какой?

http?

Alexander
11.02.2017
17:21:55
ну когда нужно много всего делать и за всем следить, попробуй для этого логику под аснхрон сделать, будешь похож на твою аватарку)

Игорь
11.02.2017
17:21:56
протокол какой?
http дергать приходится

Alexander
11.02.2017
17:22:00
протокол чего?)

Roman
11.02.2017
17:22:52
И так мы легко выяснили, что человеку треды не нужны

Игорь
11.02.2017
17:23:41
делать треды в надежде что-то ускорить - в 90% бессмысленно
у меня видимо 10%, ибо оно ускорилось. А как сделать быстрее в один поток я хз. Треды я хоть как-то контролировать могу

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