Найти - Пользователи
Полная версия: Tornado gen.engine и простая функция
Начало » Python для новичков » Tornado gen.engine и простая функция
1 2
lorien
В простейшем случае не нужны никакие сокеты и торнады, просто с помощью js раз в пять секунд делаем запрос на сервери получаем данные о процессе выполнения задания.
o7412369815963
plusplus
два пользователя одновременно не могут запустить эту настройку.
Задача непонятна. Зачем разным пользователям в одно время запускать одну и ту же настройку?

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

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

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

ЗЫ: когда писал, не видел пост от lorien, но идеи совпадают, значит они правильные :)
plusplus
Задача непонятна. Зачем разным пользователям в одно время запускать одну и ту же настройку?

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


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

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

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

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

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

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

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

Затем я начал искать, как сделать чтобы операция не была блокирующей и наткнулся на этот топик. Я так понимаю декоратор @tornado.web.asynchronous мне ничем тут не поможет? Надо делать либо потоки, либо менять торнадо на что-то другое. Вот мой вопрос в этом и был, что лучше выбрать? Через ajax тоже делал подобное когда-то, но в данный момент хочу разобраться с вебсокетами.
o7412369815963
plusplus
Я так понимаю декоратор @tornado.web.asynchronous мне ничем тут не поможет?
Грубо говоря этот декоратор только отменяет закрытие коннекта при завершении ф-ии.
plusplus
Надо делать либо потоки, либо менять торнадо на что-то другое. Вот мой вопрос в этом и был, что лучше выбрать?
Да, т.к. нагрузка маленькая, потоки особо не помешают.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB