Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 2, 2013 16:34:07

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Tornado gen.engine и простая функция

В простейшем случае не нужны никакие сокеты и торнады, просто с помощью js раз в пять секунд делаем запрос на сервери получаем данные о процессе выполнения задания.

Офлайн

#2 Сен. 2, 2013 17:50:10

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Tornado gen.engine и простая функция

plusplus
два пользователя одновременно не могут запустить эту настройку.
Задача непонятна. Зачем разным пользователям в одно время запускать одну и ту же настройку?

Я подобные вещи делал проще, пользователь запускает задачу, ей присваивается ид и она отражается в списке запущенных, на этот ид валится лог, пользователь через ajax забирает лог каждые 5 сек - видит процесс в реальном времени + бежит прогресс бар % выполнения задачи, другой пользователь может зайти на этот лог по урлу (из списка) и наблюдать то же самое.
Это админская штука, тут веб-сокеты не нужны.

Кстати если нужно передавать лог реалтайм (односторонняя передача), можно просто не закрывать коннект на сервере и валить в него лог.

Веб-сокеты - штука удобная, но для некоторых браузеров нужно юзать всякие костыли.

ЗЫ: когда писал, не видел пост от lorien, но идеи совпадают, значит они правильные :)

Отредактировано o7412369815963 (Сен. 2, 2013 17:52:01)

Офлайн

#3 Сен. 2, 2013 18:53:08

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Tornado gen.engine и простая функция

Задача непонятна. Зачем разным пользователям в одно время запускать одну и ту же настройку?

Пользователь выбирает свитч и запускает его настройку. Свитчей много, разные пользователи могут зайти на разные свитчи, но в данный момент запустить получится только у одного, остальным придется ждать первого.


Я подобные вещи делал проще, пользователь запускает задачу, ей присваивается ид и она отражается в списке запущенных, на этот ид валится лог, пользователь через ajax забирает лог каждые 5 сек - видит процесс в реальном времени + бежит прогресс бар % выполнения задачи, другой пользователь может зайти на этот лог по урлу (из списка) и наблюдать то же самое.
Это админская штука, тут веб-сокеты не нужны.

А задача каким образом запускается? Отдельным процессом?

Веб-сокеты - штука удобная, но для некоторых браузеров нужно юзать всякие костыли.
Пользователи установят нужный браузер)



Офлайн

#4 Сен. 2, 2013 21:22:47

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Tornado gen.engine и простая функция

plusplus
о в данный момент запустить получится только у одного, остальным придется ждать первого.
Наверно вы используете торнадо и запускаете блокирующую операцию? Тогда вам нужно использовать не блокирующие операции (асинхронные). Для запуска операции что используете?

plusplus
А задача каким образом запускается? Отдельным процессом?
Да, задача запускается отдельным процессом, пишет лог в свой файл, и туда же тегами указывает % выполнения - для прогресс-бара. Все клиенты через ajax получают интересующий лог.

Вообще это планировщик задач с управлением через браузер: вот одна из старых версий, написал года 4 назад, до сих пор на предприятии активно используется.

Офлайн

#5 Сен. 3, 2013 06:29:18

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Tornado gen.engine и простая функция

o7412369815963
Наверно вы используете торнадо и запускаете блокирующую операцию? Тогда вам нужно использовать не блокирующие операции (асинхронные). Для запуска операции что используете?

Ну всё было так:
class CountersSocket(tornado.websocket.WebSocketHandler):

def on_message(self, message):
# эта операция долго выполняется
self.setup(message)

Затем я начал искать, как сделать чтобы операция не была блокирующей и наткнулся на этот топик. Я так понимаю декоратор @tornado.web.asynchronous мне ничем тут не поможет? Надо делать либо потоки, либо менять торнадо на что-то другое. Вот мой вопрос в этом и был, что лучше выбрать? Через ajax тоже делал подобное когда-то, но в данный момент хочу разобраться с вебсокетами.



Офлайн

#6 Сен. 4, 2013 09:02:12

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Tornado gen.engine и простая функция

plusplus
Я так понимаю декоратор @tornado.web.asynchronous мне ничем тут не поможет?
Грубо говоря этот декоратор только отменяет закрытие коннекта при завершении ф-ии.
plusplus
Надо делать либо потоки, либо менять торнадо на что-то другое. Вот мой вопрос в этом и был, что лучше выбрать?
Да, т.к. нагрузка маленькая, потоки особо не помешают.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version